【发布时间】:2015-03-30 01:13:06
【问题描述】:
我正在用ggplot2 绘制我的数据子集,我想知道我是否会以某种方式在原始数据子集中使用ggplot 对象中已经包含的所有选项。例如,这是第一个情节(代码块 1):
require(ggplot2)
p <- ggplot(mtcars, aes(mpg, wt, color=factor(cyl))) + geom_point(shape=21, size=4)
print(p)
现在我想用mtcars 的子集制作第二个图,所以我通常会这样做(代码块 2):
new_data <- subset(mtcars, disp > 200)
p <- ggplot(new_data, aes(mpg, wt, color=factor(cyl))) + geom_point(shape=19, size=4)
print(p)
对于数据集这么小的差异,重新编写所有代码似乎有点麻烦。通常在 ggplot 中,您可以更改一些参数(这是正确的术语吗?)使用 p 进行正确的操作;例如,我可以使用p + scale_color_manual(values=rainbow(3)) 更改绘图颜色。当然,这只是一个愚蠢的例子,但是当我有一个非常详细的情节时,它会变得非常令人厌烦,到处都有很多调整。
所以基本上,我想知道的是是否有某种方式,比如一个函数x,这样我就可以做到这一点:
p + x(data = new_data)
并获得与代码块 2 相同的结果。
非常感谢, 娟
【问题讨论】:
-
我错过了什么吗?如果您将 df 200)?那么无需触摸您经过大量调整的 ggplot 代码.
-
确实,我不必再次调整代码,但我必须重新运行所有 ggplot 命令。如果我想在同一个脚本中绘制两个图,我必须再次复制并粘贴所有代码(我的目标是使用
source运行所有代码)。原则上这并没有那么糟糕,但我的剧本发展得很快,变成了一个小怪物。一种解决方案是为绘图创建一个函数,但随后我将为每个绘图创建一个函数,这似乎也很麻烦。所以,在那里,我希望隐藏在ggplot的深处会有一个函数来做我想做的事情...... -
啊,所以你想在 ggplot 调用中加入一点 for 循环!像 ggplot(data = for(i in two-or-more datasets), aes(.... 并让 ggplot 在同一代码上运行两个数据集。当然,超出了我的卑微能力,但 R 的向导可能有一个答案!