运行循环以在R中绘制子数据集

时间:2015-10-10 19:51:35

标签: r for-loop plot

这就是我想要做的。我的数据集类似于R中的Loblolly,这是14种子的因子。我想运行每个种子的循环和散点图数据(由30X给出的标识,其中X是整数),显示y轴上的高度和x轴上的年龄。每个情节的标题是种子身份,“30X”

好主人,我不太清楚如何做到这一点。到目前为止我所知道的是如何绘制一个散点图如下:

xrange<-range(Loblolly$age)
yrange<-range(Loblolly$height)
plot(xrange, yrange, type="n", xlab="Age", ylab="Height")

你将如何迭代地为整个数据集做这件事。是的,十四个仍然是一个好的数字但是如果我想在另一个数据集中使用100种种子的类似类型代码,我认为你将不得不使用for循环,对吧?任何帮助在这里将不胜感激。

2 个答案:

答案 0 :(得分:0)

嗯,这是一个存根,可以帮助你。我在列表中构建了不同的目标,然后遍历它们:

# multiple plots via a for, with the x = sprintf in the aes call providing contextualized strings as params

varList = list("Var1","Var2","Var3")
plot_list = list()
for (i in 1:3) {
    gg = ggplot(data_set,aes(xfill=factor(RETAINED)))
    gg = gg + aes_string(x = sprintf("log(%s)", varList[[i]])) 
    gg = gg + geom_density(alpha=.3) + labs(x = varList[[i]],y="Density") 
    gg = gg + ggtitle(paste("Distribution of ",varList[[i]],sep=" ")) 
    plot_list[[i]] = gg
}

答案 1 :(得分:0)

您绝对可以为此创建for循环,但您也可以使用基于Seed(按该列分组)分割数据集的方法,并为每个子数据集生成一个图。

首先将工作目录设置为要存储图表的文件夹。 然后运行:

library(dplyr)

Loblolly %>%
  group_by(Seed) %>%
  do({pdf(paste0(.$Seed,".pdf"))
      plot(.$age, .$height, xlab="Age", ylab="Height", main=unique(.$Seed))
      dev.off()}) 

您应该忽略以下错误: Error: Results are not data frames at positions: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14并检查是否已创建pdfs。

如果您不想使用任何可以使用的库:

list_seeds = unique(Loblolly$Seed)   # get a list of seeds

for (i in list_seeds) {              # for every seed value

  dt = Loblolly[Loblolly$Seed == i,]    # get a sub-dataset that corresponds to that seed value

  pdf(paste0(i,".pdf"))
  plot(dt$age, dt$height, xlab="Age", ylab="Height", main=i)
  dev.off()
}