【问题标题】:How to add "arbitrary" points to a violin plot?如何在小提琴情节中添加“任意”点?
【发布时间】:2021-08-25 21:27:53
【问题描述】:

长话短说,我为 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 的“Extra”列中的整数,作为每个小提琴上的单点(因此三个整数将是 85、60 和 55)。

我最初尝试添加一个 geom_point 图层,并认为 Extra 将按 Group 分组,就像 Data 一样,但这不起作用(错误:离散值提供给连续比例)。

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

这是数据:

这是迄今为止的情节:

【问题讨论】:

    标签: r ggplot2 violin-plot


    【解决方案1】:

    所以它实际上只是多行代码——你可以在 ggplot 中将不同的几何图形拼接在一起,这样就可以很容易地完成你正在谈论的事情。只需添加

    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)
    

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

    【讨论】:

      【解决方案2】:

      您的示例运行良好。唯一要更新的是不要在 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 创建

      【讨论】:

        猜你喜欢
        • 2021-04-21
        • 2020-12-19
        • 1970-01-01
        • 2018-05-15
        • 2021-06-01
        • 2015-03-22
        • 2018-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多