You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggbarplot中为均值±标准差的抖动点按group2着色?

问题:ggpubr柱状图中让抖动点按group2着色

我有如下数据框:

my.var group1 group2
c1    3.8      c    gp1
c2    3.9      c    gp2
c3    4.3      c    gp3
c4    3.7      c    gp4
s1    3.6      s    gp1
s2    3.9      s    gp2
s3    3.2      s    gp3
s4    3.6      s    gp4
x1    3.6      x    gp1
x2    4.4      x    gp2
x3    3.9      x    gp3
x4    4.4      x    gp4

数据框的dput对象:

df <- structure(list(my.var = c(3.8, 3.9, 4.3, 3.7, 3.6, 3.9, 3.2, 
3.6, 3.6, 4.4, 3.9, 4.4), group1 = c("c", "c", "c", "c", "s", 
"s", "s", "s", "x", "x", "x", "x"), group2 = c("gp1", "gp2", 
"gp3", "gp4", "gp1", "gp2", "gp3", "gp4", "gp1", "gp2", "gp3", 
"gp4")), row.names = c("c1", "c2", "c3", "c4", "s1", "s2", "s3", 
"s4", "x1", "x2", "x3", "x4"), class = "data.frame")

我已经用ggpubr创建了展示group1分组下my.var均值±标准差的柱状图,现有代码如下:

library(ggpubr)

ggbarplot(df, x="group1", y="my.var", 
          add=c("mean_sd", "jitter")) +
  stat_compare_means(comparisons=list(c("s", "c"), c("x", "c")), method="t.test", 
                     label = "p.signif")

现在希望让图中的抖动点按照group2的类别着色,请问该怎么实现?


解决方案

要实现抖动点按group2着色,不能直接使用add="jitter",需要通过自定义geom_jitter()来指定颜色映射,修改后的代码如下:

library(ggpubr)

ggbarplot(df, x="group1", y="my.var", add="mean_sd") +
  geom_jitter(aes(color = group2), width = 0.2) +  # 按group2给抖动点着色,控制抖动幅度
  stat_compare_means(comparisons=list(c("s", "c"), c("x", "c")), method="t.test", 
                     label = "p.signif") +
  scale_color_discrete(name = "Group2")  # 可选:修改颜色图例的标题

关键改动说明:

  • 移除原代码add参数中的"jitter",改用geom_jitter()单独添加抖动点
  • 在geom_jitter()的aes()里设置color = group2,将抖动点颜色与group2关联
  • width=0.2用于调整抖动点在x轴方向的分散程度,可根据图表需求自行修改
  • scale_color_discrete()是可选配置,用于优化颜色图例的显示标题,提升图表可读性

内容的提问来源于stack exchange,提问作者Cocoa99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:47:04