ggplot2:有没有办法将单个绘图叠加到ggplot中的所有方面

时间:2013-04-05 13:13:02

标签: r ggplot2

我想使用ggplot和faceting构建一系列按因子分组的密度图。另外,我想在每个小平面上的另一个密度图,不受小平面施加的约束。

例如,刻面图将如下所示:

require(ggplot2)
ggplot(diamonds, aes(price)) + facet_grid(.~clarity) + geom_density()

然后我想在每个方面的顶部分层以下单密度图:

ggplot(diamonds, aes(price)) + geom_density()

此外,ggplot是否具有最佳方法,或者是否有首选方法?

1 个答案:

答案 0 :(得分:20)

实现此目标的一种方法是制作仅包含列diamonds2然后两个price调用的新数据框geom_density() - 其中一个将使用原始diamonds和第二个使用diamonds2。与diamonds2中一样,没有列clarity所有值都将用于所有方面。

diamonds2<-diamonds["price"]
ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) + 
     geom_density(data=diamonds2,aes(price),colour="blue")

enter image description here

UPDATE - 正如@BrianDiggs所建议的那样,可以在不创建新数据框的情况下实现相同的结果,但可以在geom_density()内进行转换。

ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) +
     geom_density(data=transform(diamonds, clarity=NULL),aes(price),colour="blue")

另一种方法是在没有刻面的情况下绘制数据。向geom_density()添加两个调用 - 在一个添加aes(color=clarity)中为每个clarity级别设置不同颜色的密度线,并留空第二个geom_density() - 这将增加整体黑色密度线。

ggplot(diamonds,aes(price))+geom_density(aes(color=clarity))+geom_density()

enter image description here