stat_compare_means仅首个分面组显示统计结果的原因咨询
问题:ggplot2分面箱线图仅首个组显示stat_compare_means标记
我用ggplot2绘制分面箱线图并做均值比较,数据结构如下:
structure(list(Time = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L), levels = c("4", "5", "6", "7", "8"), class = "factor"), Group = c("16S", "16S", "16S", "16S", "16S", "16S", "16S", "16S", "16S", "16S", "16S", "16S", "16S", "16S", "16S", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "arabinan", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob", "skrob" ), Cq = c(11.13063931, 11.15984429, 9.764765629, 11.11921187, 11.23636015, 11.3220628, 13.57819885, 13.49193753, 12.10672097, 14.44320106, 14.37544944, 8.47863564, 16.01102045, 12.85357539, 13.86110729, 21.62921058, 19.90989407, 21.0387778, 19.30354718, 19.63518702, 19.4119743, 17.06448567, 16.95057763, 16.9692573, 14.96970081, 15.02672693, 14.98234806, 15.01538052, 14.75905977, 14.78030967, 13.84361199, 14.17159598, 14.489989, 14.8658601, 14.90056887, 14.66559991, 15.89827103, 15.49736892, 15.70061002, 21.39779052, 21.39592915, 21.59904463, 22.61395674, 22.55805188, 22.46050134), Starting.Quantity..SQ. = c(0.031695618, 0.031098635, 0.07712746, 0.031932316, 0.029587343, 0.027981628, 0.006440738, 0.006812815, 0.016788261, 0.003667335, 0.003832726, 0.178184848, 0.001321415, 0.010323517, 0.005357244, 0.015890751, 0.04604206, 0.02289834, 0.067002457, 0.054572433, 0.062654818, 0.267772272, 0.287325838, 0.284024058, 0.978747868, 0.944815297, 0.971118645, 0.951471738, 1.114997127, 1.100432813, 2.939653152, 2.402067713, 1.974418707, 1.566470577, 1.533346405, 1.772052794, 0.829527162, 1.06179707, 0.936892888, 0.02806249, 0.028094673, 0.024791682, 0.013270704, 0.013735494, 0.014585847)), row.names = c(NA, -45L), class = "data.frame")
使用的代码:
library(ggplot2) my_data <- read.csv("data", header = TRUE) boxplot <- ggplot(my_data, aes(factor(Time), Starting.Quantity..SQ., fill = Group)) + facet_wrap(~Group) + geom_boxplot() boxplot + stat_compare_means(comparisons = list(c("4", "5"), c("4", "6"), c("4", "7"), c("4", "8")), method="t.test", label="p.signif")
生成的图像仅首个分面组(Group)显示了stat_compare_means的统计分析结果,其余组无相关标记,咨询该问题的原因及解决方法。
原因分析
- stat_compare_means默认仅处理全局首个分组:用
facet_wrap分面时,该函数默认不会自动遍历每个分面的独立数据,只会对整个数据集的第一组(这里是16S)执行统计计算并添加标记。 - 未指定分面内的独立统计逻辑:当前代码没有明确告诉统计函数要在每个分面内部单独处理对比,导致函数只执行了一次全局计算。
解决方法
需要让统计函数在每个分面内独立运行,以下是两种可行方案:
方案1:调整stat_compare_means的参数
通过指定group = Group,让函数在每个分面内独立处理对比:
library(ggplot2) library(ggpubr) # 加载你的数据 my_data <- structure(...) boxplot <- ggplot(my_data, aes(x = Time, y = Starting.Quantity..SQ., fill = Group)) + facet_wrap(~Group) + geom_boxplot() boxplot + stat_compare_means( comparisons = list(c("4", "5"), c("4", "6"), c("4", "7"), c("4", "8")), method = "t.test", label = "p.signif", group = Group # 关键:指定按分面组独立计算 )
方案2:使用geom_signif更精准控制
如果方案1效果不佳,可使用ggsignif包的geom_signif,开启分面组内独立统计:
library(ggplot2) library(ggsignif) # 加载你的数据 my_data <- structure(...) ggplot(my_data, aes(x = Time, y = Starting.Quantity..SQ., fill = Group)) + facet_wrap(~Group) + geom_boxplot() + geom_signif( comparisons = list(c("4", "5"), c("4", "6"), c("4", "7"), c("4", "8")), test = "t.test", map_signif_level = TRUE, facet.group = TRUE # 关键:开启分面内独立统计 )
内容的提问来源于stack exchange,提问作者aetobatus-narinari
相关产品推荐
相关产品推荐

