【问题标题】:Add line plots to ggplot2 in a loop在循环中将线图添加到 ggplot2
【发布时间】:2017-04-20 23:10:22
【问题描述】:

我想逐步创建一个 ggplot2,我在现有的图中添加了许多行,如下所示:

pl = ggplot()
pl = pl + somesetup
while(stillhavelines) {
  df = getTheLine(fromsomewhere)
  pl = pl + geom_line(aes(df$x,df$y),linetype=lt,colour=co) ## !!!!
}
ggsave(...)

奇怪的是,如果我这样做,那么所有线图都将从一个数据框中显示出来。相反,我尝试通过将每个数据帧分配给它自己的变量来执行此操作。

如何告诉 ggplot 实际显示来自不同数据帧的线条?为什么它甚至会这样做,这是非常令人惊讶和不直观的。

【问题讨论】:

  • 这并不是 ggplot2 的真正使用方式(尽管我猜可能需要付出很多努力)。为什么不在绘图前增量构建 data?就此而言,为什么要逐步构建任何东西?
  • @Konrad Rudolph 因为最好的编码习惯是不要一遍又一遍地重复几乎相同的代码。想象一下,您想要一个图表来演示参数如何更改 4 个参数的分布 (like this) 的 pdf,每个参数 5 个值。您不关心正在绘制的坐标,因此不需要构建数据框。与其编写 4x5=20 次几乎相同的 geom_lines 命令,只是改变标签等(或以一种奇怪的方式将标签、颜色等折叠到数据框中),不如使用循环。
  • @0range 我绝不建议复制代码。您链接到的情节在没有重复代码或循环的情况下很容易实现。
  • @Konrad Rudolph 好吧,如果你觉得这很琐碎,我显然不擅长使用 R 和 ggplot2。前几天我遇到了这个问题(加上必须在牛图网格中排列其中四个图,这需要 ggplot2)。我可以使它工作的唯一方法是结合使用循环和函数。
  • @0range 这是该图的代码:rpubs.com/klmr/levy。对于网格,您也可以这样做,添加 facet_grid;不需要牛图。

标签: r ggplot2


【解决方案1】:

您可以使用data 参数定义在ggplot 层中使用的数据:

pl = pl + geom_line(data = df, aes(x = x, y = y), linetype = lt, colour = co)

如果未指定data,它将假定该层实际上每次都是相同的,因此只会显示最近的层。

我用以下代码对其进行了测试:

library(ggplot2)

dat <- list(
  data.frame(a = 1:5, b = 8:12), 
  data.frame(a = 11:15, b = 18:22), 
  data.frame(a = 21:25, b = 28:32)
)

p <- ggplot()

i <- 1

while(i <= length(dat)) {
  df <- dat[[i]]
  p <- p + geom_line(data = df, aes(a, b))  
  i <- i + 1
}

p

虽然 Konrad Rudolph stated 我不确定在什么情况下你会想要这样做。最好先组织数据,然后再绘制更简单的ggplot 代码。

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多