R-使用for循环时需要网格ggplots

时间:2018-03-30 03:33:26

标签: r ggplot2

我有一个循环用ggplot绘制一些散点图,但我将它们作为单独的图(每个唯一的参与者ID)。 我想每页有多个图表,比如网格。我可能不希望在一个页面上显示所有50个参与者的情节,但是一些合理的安排会很好。 R很新,所以明确的代码或细分受到赞赏。我的代码和谢谢:

for(i in unique(data$id)){
  gi <- ggplot(aes(Date, Time), data = subset(data, id == i)) +
    geom_point() +facet_grid(~id)
  ggsave(filename = sprintf('%s.png', i), plot = gi)

}

到目前为止,我已经尝试过遵循gridExtra格式但收到错误消息。新代码:

gi <- list()
for(i in unique(data$id)){
  gi <- ggplot(aes(Date, Time), data = subset(data, id == i)) +
    geom_point() +facet_grid(~id)
  ggsave(filename = sprintf('%s.png', i), plot = gi)

}
do.call(grid.arrange,gi)

错误消息:$<-.data.frame中出错(*tmp*,wrapvp,value = list(x = 0.5,y = 0.5,:   替换有17行,数据有23个

1 个答案:

答案 0 :(得分:0)

您是尝试将它们保存为单独的图表(ggsave做了什么),还是将每个图表添加到列表中(我在gi <- list()猜测的是什么),或两者兼而有之?

每次运行此循环时,您都会创建一个绘图,然后将其分配给变量gi。如果您在控制台中键入giprint(gi),那么您只能获得在该循环中创建的最后一个图表,对吗?如果您尝试将每个绘图作为列表中的项目,则需要将每个绘图附加到列表中。

因此,请执行gi <- ggplot(...)

之类的操作,而不是gi <- append(gi, ggplot(...))

我也很困惑你们面对并使用for循环。看起来您可以放弃循环并使用facet_wrap(~ id)