ggplot2中的for循环问题

时间:2017-06-13 21:09:15

标签: r for-loop ggplot2

我想从ggplot2输出多个图表。我找到了非常好的例子,但仍然无法找到我想要达到的目标。

r-saving-multiple-ggplots-using-a-for-loop

通过使用类似的例子,我只想为每个物种输出三个不同的图表到目前为止我输出相同的三个组合图。

library(dplyr)

    fill <- iris%>%
      distinct(Species,.keep_all=TRUE)

    plot_list = list()
    for (i in 1:length(unique(iris$Species))) {
      p = ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) +
        geom_point(size=3, aes(colour=Species))
  geom_rect(data=fill,aes(fill = Petal.Width),xmin = -Inf,xmax = Inf,ymin = -Inf,ymax = Inf,alpha = 0.5)+   ## added later to OP

      plot_list[[i]] = p
    }

# Save plots to tiff. Makes a separate file for each plot.
for (i in 1:3) {
  file_name = paste("iris_plot_", i, ".tiff", sep="")
  tiff(file_name)
  print(plot_list[[i]])
  dev.off()
}

我缺少什么?

enter image description here

1 个答案:

答案 0 :(得分:2)

您没有过滤for-loop内的数据集,因此相同的图表会重复三次而不会发生变化。

请注意此处的更改:

plot_list = list()
for (i in unique(iris$Species)) {
  p = ggplot(iris[iris$Species == i, ], aes(x=Sepal.Length, y=Sepal.Width)) +
    geom_point(size=3, aes(colour=Species))
  plot_list[[i]] = p
}

解决OP更新问题,这对我有用:

fill <- iris %>%
  distinct(Species, .keep_all=TRUE)

for (i in unique(iris$Species)) {
  p = ggplot(iris[iris$Species == i, ], aes(x=Sepal.Length, y=Sepal.Width)) +
    geom_rect(data = fill, aes(fill = Petal.Width),xmin = -Inf,xmax = Inf,ymin = -Inf,ymax = Inf,alpha = 0.5) +
    geom_point(size = 3, aes(colour = Species))
  plot_list[[i]] = p
}