r-更改ggplot对象的数据集



我正在用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相同的结果。

非常感谢,Juan

我认为使用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)

如果您只想要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)

如果问题被重新表述为"我如何避免编写重复的代码来用不同的数据绘制类似的图?",一个答案是使用适用于ggplot对象的函数:

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)))

相关内容

  • 没有找到相关文章

最新更新