1

我需要生成并保存到 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()
}
4

1 回答 1

0

你很接近!罪魁祸首在这里: barplot(mydata$J5A ....
你反而想使用

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





泄露出来的是,第一个参数barplot当然是数据。所以我们看看这个论点,看看它是否随着你的 for 循环的每次迭代而变化。 mydata$J5A是恒定的,我们需要一些对 的引用i,例如mydata[, i]

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

  for (i in 2:ncol(myData))  {
    . . . 
  }
于 2013-04-03T15:17:10.457 回答