更改ggplot对象的数据集

时间:2015-03-30 01:13:07

标签: r graphics plot ggplot2

我用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相同的内容。

非常感谢, 涓

3 个答案:

答案 0 :(得分:16)

我认为可以使用ggplot%+%运算符轻松完成。

p <- ggplot(mtcars, aes(mpg, wt, color=factor(cyl))) + geom_point(shape=21, size=4)
print(p)

p2<-p %+% mtcars[mtcars$disp>200,]
print(p2)

答案 1 :(得分:2)

如果你只想要chunk2:

ggplot(mtcars[mtcars$disp>200,], aes(mpg, wt, color=factor(cyl)))+
geom_point(shape=19, size=4)

如果你想在一个情节中同时使用它们:

ggplot() + 
geom_point(data=mtcars, aes(mpg, wt, color=factor(cyl)),shape=21, size=4)+
geom_point(data=mtcars[mtcars$disp>200,], aes(mpg, wt, color=factor(cyl)),shape=19, size=4)

答案 2 :(得分:2)

如果问题被重新表述为,&#34;我如何避免编写重复的代码来制作具有不同数据的类似图?&#34;,一个答案是使用适用于ggplot对象的函数:< / p>

my_plot <- function (p) {
    p + aes(color=factor(cyl)) + geom_point(shape=21, size=4)
}

p1 <- ggplot(mtcars, aes(mpg, wt))
p2 <- ggplot(newdata, aes(mpg, wt))

p1 <- my_plot(p1); print(p1)
p2 <- my_plot(p2); print(p2)

这将所有共享的绘图参数放在一个地方,使代码更清晰,并简化维护。当然,代码仍然针对每个绘图对象运行。

当然,你可以通过组合函数(我最近的工作中的一个例子)任意地使事情复杂化:

p2 <- by_gene(stacked_bars(my_plot(p2)))