【问题标题】:Overlay violin plots ggplot2叠加小提琴图ggplot2
【发布时间】:2013-10-20 21:28:37
【问题描述】:

我想绘制两个系列的十个小提琴情节,一个接一个:

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”的相应小提琴图之上。

【问题讨论】:

  • 很好地提出了一个目标明确的可重复问题。

标签: r plot ggplot2


【解决方案1】:

您可以将第二个情节的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 包含两个版本的小提琴。

顺便说一句:如果你想去掉颜色图例,你必须在aes之外指定colour

【讨论】:

  • 很好的例子(+1),一种常见的方法是反映其中一个组分布,因为密度是对称的。我在 cmets mbjoseph.github.io/blog/2013/06/24/violin 中举了一个这样做的例子。人们可能还想考虑不同的加权方案;在本例中,蓝色组和红色组的面积可能相同,因为它们的样本量相同。
【解决方案2】:

另一种方法是将position 设置为“身份”。此示例还使用tidyr::gatherdata.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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-14
    • 2019-01-21
    • 2018-01-15
    • 2016-06-13
    • 2017-01-04
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多