用于条形图的R循环如何传递数据?

时间:2013-04-03 15:00:48

标签: r loops plot

我需要生成并保存到jpeg多个简单的条形图,其中四个条形代表四个数据点。我成功地使代码循环,以所需的格式生成正确数量的jpeg文件条形图。但我无法确定为每个条形图插入相关数据所需的代码。我只能生成多个图,每个文件/图中都有相同的数据。 我应该在代码中更改哪些内容以将相关数据插入每个图表?

以下是我的代码。

'names'是一个包含一个名为'personid'的变量的数据框。 'personid'包含'mydata'中的所有变量名。

'mydata'是这样设置的数据框:

  J5A J5B J5C ...
w 2.1 1.3 3.2 ...
x 1.9 2.2 1.8 ...
y 1.5 2.4 1.8 ...
z 1.9 2.2 1.7 ...

如果我在代码中使用变量名称(例如mydata $ J5A),我可以在单独的jpeg文件中生成43个图,这些文件都包含J5A的数据。不好。我的理解是我应该使用mydata $ kid.i,但显然不是,因为循环中止而且我得到错误

"Error in barplot.default(kid.i, xlab = "Language Skills", ylim = c(1,  : 
'height' must be a vector or a matrix"

代码:

allkids <- unique(names$personid)
for (i in 1 : 43) {
setwd("D:/R/BARPLOTS/")
kid.i <- allkids[i]
filename <- paste (kid.i, ".jpg", sep="")
jpeg(file = filename)
barplot(mydata$J5A, xlab = "Language Skills", ylim = c(1,3), xpd = FALSE,
    names.arg=working2$varname, axes=FALSE, cex.names=.8, col=c("darkblue","red",
    "darkgreen", "yellow"))
dev.off()
}

更新:对于有兴趣的人,这是删除了错误的最终工作代码:

allkids <- unique(names$personid)
for (i in 2 : 44) {
setwd("D:/R/BARPLOTS/")
kid.i <- allkids[i]
filename <- paste (kid.i, ".jpg", sep="")
jpeg(file = filename)
barplot(mydata[, i], xlab = "Language Skills", ylim = c(1,3), xpd = FALSE,
    names.arg=working2$varname, axes=FALSE, cex.names=.8, col=c("darkblue","red",
    "darkgreen", "yellow"))
dev.off()
}

1 个答案:

答案 0 :(得分:0)

你非常接近!罪魁祸首在于:barplot(mydata$J5A ....
你想要使用

  barplot(mydata[, i] . . .. .





什么让它离开barplot的第一个参数当然是数据。因此,我们查看该参数,看看它是否随着for循环的每次迭代而变化。 mydata$J5A是不变的,我们需要引用i,例如mydata[, i]

根据评论更新
如果您的第一列(或前几列)不是您要绘制的数据 - 例如标签,名称和其他功能 - 那么您应该在该列之后启动您的迭代变量i。在上面显示的特定情况下,您要使用

  for (i in 2:ncol(myData))  {
    . . . 
  }