【发布时间】: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;不需要牛图。