如何将 "arbitrary" 点添加到小提琴图?

How to add "arbitrary" points to a violin plot?

长话短说,我 运行 对 15 个组中的每个组进行了一堆随机模拟,并且每组都有一个整数,我需要将其添加到情节中的每个小提琴,但似乎无法弄清楚该怎么做。这是一个可重现的例子:

# Making data
df <- data.frame(c(rep(1,10), rep(2,10), rep(3,10)), sample.int(100, 30), c(rep(85,10), rep(60,10), rep(55,10)))
colnames(df) <- c("Group", "Data", "Extra")

# Grouping data
df$Group <- as.factor(df$Group)

# Plotting
Violin2 <- ggplot(data = df, aes(x = Group, y = Data))+
  geom_violin(aes(fill = Group, color = Group))+
  stat_summary(aes(y = Data), fun=mean, geom="point", color = "navyblue", shape = 17, size = 3)+
  stat_summary(aes(y = Data), fun=median, geom="point", color = "black", shape = 16, size = 3)
  #geom_point(aes(y = Extra, color = "#00BB66", shape = 16, size = 3)+
Violin2

所以在这里,我是说在 df 中,有三组:1、2 和 3,它们应用于“数据”列。我需要添加的是 df 的“额外”列中的整数,作为每把小提琴上的单个点(因此三个整数将是 85、60 和 55)。

我最初尝试添加一个 geom_point 层,并认为 Extra 将按组分组,就像数据一样,但这没有用(错误:向连续比例提供离散值)。

我在这里搜索了很多,但找不到解决方案,所以任何建议将不胜感激!非常感谢您的帮助! :)

这是数据:

这是目前的情节:

您的示例运行良好。唯一要更新的是不要对 aes 中的颜色 arg 使用常量值。你只能在 aes 之外使用它。

# Making data
library(ggplot2)

df <- data.frame(c(rep(1,10), rep(2,10), rep(3,10)), sample.int(100, 10), c(rep(85,10), rep(60,10), rep(55,10)))
colnames(df) <- c("Group", "Data", "Extra")

# Grouping data
df$Group <- as.factor(df$Group)

# Plotting
Violin2 <- ggplot(data = df, aes(x = Group, y = Data))+
  geom_violin(aes(fill = Group, color = Group))+
  stat_summary(aes(y = Data), fun=mean, geom="point", color = "navyblue", shape = 17, size = 3)+
  stat_summary(aes(y = Data), fun=median, geom="point", color = "black", shape = 16, size = 3) +
  geom_point(aes(y = Extra))
Violin2

reprex package (v2.0.0)

于 2021-06-08 创建

所以它实际上只是多了一行代码 - 您可以在 ggplot 中将不同的 geom 拼接在一起,这使得准确地完成您正在谈论的事情变得非常容易。只需添加

geom_point(aes(y = Data)) + 

所以整个代码看起来像这样

ggplot(data = df, aes(x = Group, y = Data))+
  geom_violin(aes(fill = Group, color = Group))+
  geom_point(aes(y = Extra), size = 2, colour = "red") +
  stat_summary(aes(y = Data), fun=mean, geom="point", 
               color = "navyblue", shape = 17, size = 3)+
  stat_summary(aes(y = Data), fun=median, geom="point", 
               color = "black", shape = 16, size = 3)

我已将点涂成红色并将它们变大,但您可以更改它。这给出了: