R 如何在ggplot2中使用附加单值点绘制小提琴图

R 如何在ggplot2中使用附加单值点绘制小提琴图,r,ggplot2,R,Ggplot2,我想在ggplot中绘制一个小提琴图,其中对于每组数据,我将分布绘制为小提琴图,将单个观测值绘制为点,如下所示: 有人知道怎么做吗 下面是一个数据示例: p <- data.frame("Experimental_group" = c("Group_1", "Group_1", "Group_1", "Group_1", "Group_1", "Group_1

我想在ggplot中绘制一个小提琴图,其中对于每组数据,我将分布绘制为小提琴图,将单个观测值绘制为点,如下所示:

有人知道怎么做吗

下面是一个数据示例:

p <- data.frame("Experimental_group" = c("Group_1", "Group_1", "Group_1", "Group_1", "Group_1", "Group_1", "Group_1", "Group_2", "Group_2", "Group_2", "Group_2", "Group_2", "Group_2", "Group_2"), "Set" = c("Distribution", "Distribution", "Distribution", "Distribution", "Distribution", "Distribution", "Observed", "Distribution", "Distribution", "Distribution", "Distribution", "Distribution", "Distribution", "Observed"), "Value" = c(18, 20, 17, 13, 29, 18, 180, 14, 23, 11, 26, 24, 10, 200))

p您可以尝试这种方法。您可以将数据帧
p
分为
Distribution
Observed
。然后,您可以组合不同的
geom*()
元素来添加点或文本并达到预期的输出。此代码有助于实现与所需类似的结果:

library(tidyverse)
#Subset data
p1 <- p %>% filter(Set=='Distribution')
p2 <- p %>% filter(Set!='Distribution') %>% mutate(Label='***')
#Plot
ggplot(p1,aes(x=Experimental_group,y=Value,fill=Experimental_group))+
  geom_violin()+
  geom_point(data=p2,aes(x=Experimental_group,y=Value,color=Experimental_group))+
  geom_text(data=p2,aes(x=Experimental_group,y=Value,label=Label),fontface='bold',vjust=-0.25)
库(tidyverse)
#子集数据
p1%过滤器(集合=='Distribution')
p2%过滤器(设置!='Distribution')%%>%变异(标签='***')
#密谋
ggplot(p1,aes(x=实验组,y=数值,填充=实验组))+
geom_小提琴()+
几何点(数据=p2,aes(x=实验组,y=数值,颜色=实验组))+
几何图形文本(数据=p2,aes(x=实验组,y=值,标签=标签),fontface='bold',vjust=-0.25)
输出:


ggplot2
中,可以为每个图层指定不同的数据。您可以使用
dplyr
中的
filter
来过滤每个层的数据。过滤
geom_小提琴
层中的分布,并为单个观测添加
geom_点

library(dplyr)
library(ggplot2)
ggplot() + 
  geom_violin(data = p %>% filter(Set == "Distribution"), 
              aes(x = Experimental_group, y = Value, fill = Experimental_group)) + 
  geom_point(data = p %>% filter(Set == "Observed"),
             aes(x = Experimental_group, y = Value, color = Experimental_group), size = 5)

像这样的东西应该可以用

library(ggplot2)
p1 <- subset(p, Set != "Observed")
p2 <- subset(p, Set == "Observed")

ggplot(p1) +
  aes(x = Experimental_group, y = Value) +
  geom_violin() +
  geom_point(data = p2)
库(ggplot2)

非常感谢!