3

これが私の質問です:

#data 1:
lab1 <- 1:10
group <- rep(1:3, each = length (lab1))
label <- rep(lab1, 3)
avar <-  rep(c(0, 1, 4, 5, 6, 8, 10,  11, 12,  13), 3)
myd <- data.frame (group, label, avar)

# data 2
fillcol <- rep(rnorm(length(lab1)-1, 0.5, 0.2), 3)
group1 <- rep(1:3, each = length(fillcol)/3)
 # this variable will be used to fill color in bars
 filld <- data.frame(group1, fillcol)

# now plotting
par(mfrow = c(3, 1))
 par(mar = c(2.5, 1, 2.5, 1))

#plot1
myd1 <- myd[myd$group ==1,]
filld1 <- filld[filld$group1 ==1,]
blues <- colorRampPalette(c("yellow", "blue"))
barplot(as.matrix(diff(myd1$avar)), horiz=T, col=blues(10)[10* filld1$fillcol], 
 axes=F, xlab="Mark")
axis(1, labels=myd$label, at=myd$avar)
axis(3, labels=myd$avar, at=myd$avar)

このサンプル データセットには多くの変数があり、このプロセスを自動化したいと考えています。

for (i in 1:length(unique(myd$group))){
         par(mfrow = c(i, 1))
        par(mar = c(2.5, 1, 2.5, 1))
                myd[i] <- myd[myd$group ==i,]
        filld[i] <- filld[filld$group1 ==i,]
      blues <- colorRampPalette(c("yellow", "blue"))
      barplot(as.matrix(diff(myd[i]$avar)), horiz=T, 
   col=blues(10)[10* filld1$fillcol], axes=F, xlab="Mark")
      axis(1, labels=myd[i]$label, at=myd[i]$avar)
        axis(3, labels=myd[i]$avar, at=myd[i]$avar)
        }
 Error in dim(data) <- dim : attempt to set an attribute on NULL
In addition: Warning messages:
1: In `[<-.data.frame`(`*tmp*`, i, value = list(group = c(1L, 1L, 1L,  :
  provided 3 variables to replace 1 variables
2: In `[<-.data.frame`(`*tmp*`, i, value = list(group1 = c(1L, 1L,  :
  provided 2 variables to replace 1 variables

編集:ループ内に複数のグラフを作成するようにループを作成したい:

ここに画像の説明を入力

PS: R と stackoverflow は初めてです。ガイドラインを読み、それに従うように努めていますが、質問が適切でない場合はご容赦ください。

4

2 に答える 2

2

このような関数でラップすると、機能させて複数回呼び出すことができるはずです。

colbarplot <- function(group) {

    myd1 <- myd[myd$group == group,]
    filld1 <- filld[filld$group1 == group,]
    blues <- colorRampPalette(c("yellow", "blue"))
    barplot(as.matrix(diff(myd1$avar)), horiz=T,
            col=blues(10)[10* filld1$fillcol], 
            axes=F, xlab="Mark")
    axis(1, labels=myd$label, at=myd$avar)
    axis(3, labels=myd$avar, at=myd$avar)
}

par(mfrow = c(3, 1))
par(mar = c(2.5, 1, 2.5, 1))
sapply(unique(myd$group),function(x) colbarplot(x))

これにより、目的の 1 ページに複数のプロットが表示されます。

于 2012-05-02T01:21:50.830 に答える
0

ここで 2 つの問題があります。ループ内で意図せず「myd」と「filld」を上書きしています。次に、最初に mfrow を指定してから、プロット (この例では 3) を生成する必要があります。途中でmfrowをリセットしています。あなたが望むものではありません。

これを試して:

opar <- par(mfrow = c(length(unique(myd$group)), 1), mar = c(2.5, 1, 2.5, 1))

for (i in 1:length(unique(myd$group))){
    myd1 <- myd[myd$group ==i,]
    filld1 <- filld[filld$group1 ==i,]
    blues <- colorRampPalette(c("yellow", "blue"))
    barplot(as.matrix(diff(myd1$avar)), horiz=T, 
       col=blues(10)[10* filld1$fillcol], axes=F, xlab="Mark")
    axis(1, labels=myd1$label, at=myd1$avar)
    axis(3, labels=myd1$avar, at=myd1$avar)
 }

 par(opar);
于 2012-05-02T01:59:21.690 に答える