叠加小提琴情节ggplot2

时间:2013-10-20 21:28:37

标签: r plot ggplot2

我想在第二部分中绘制两个系列的十个小提琴图:

library(ggplot2)
#generate some data

coco1<-rnorm(10000,0,1)
coco2<-c(runif(10000))
decile<-rbinom(10000,9,1/2)+1
coconut<-data.frame(coco1,coco2,decile)

#draw the violin plots of the coco1 serie
p <- ggplot(coconut, aes(factor(decile), coco1))
p<-p + geom_violin(aes(alpha=0.3,colour="#1268FF"))
p

#draw the violin plots of the coco2 serie
q <- ggplot(coconut, aes(factor(decile), coco2))
q<-q + geom_violin(aes(alpha=0.3,colour="#3268FF"))
q

我想在同一张图上绘制小提琴情节“p”和“q”,我希望每个小提琴情节“q”都超过相应的“p”小提琴情节。

2 个答案:

答案 0 :(得分:9)

您只需将第二个地块的geom_violin添加到第一个地图:

p <- ggplot(coconut, aes(factor(decile), coco1))
p <- p + geom_violin(aes(colour = "#1268FF"), alpha = 0.3)
q <- p + geom_violin(aes(y = coco2, colour = "#3268FF"), alpha = 0.3)

现在,q包含两个版本的小提琴。 enter image description here

顺便说一下:如果你想摆脱颜色图例,你必须在colour之外指定aes

答案 1 :(得分:2)

另一种方法是将position设置为“ identity”。此示例还使用tidyr::gather来移动data.frame一点,以便更容易在ggplot中进行绘制。

library(ggplot2)

coco1<-rnorm(10000,0,1)
coco2<-c(runif(10000))
decile<-rbinom(10000,9,1/2)+1
coconut<-tidyr::gather(
    data.frame(coco1,coco2,decile),
    name,value,coco1,coco2)

p <- ggplot(coconut)+
    aes(x=factor(decile),y=value,color=name)+
    geom_violin(alpha=0.3,position="identity")
p

ggsave("example_identity.png",p)

enter image description here