如何在ggstatsplot的Kruskal-Wallis检验图中显示显著性字母?
用显著性字母替代ggstatsplot中Kruskal-Wallis检验的p值条形
可行实现方法
1. 安装并加载依赖包
需要用到生成显著性字母、统计检验和绘图的相关包:
# 安装缺失的包 install.packages(c("ggstatsplot", "multcompView", "dplyr", "FSA", "tidyr")) # 加载包 library(ggstatsplot) library(multcompView) library(dplyr) library(FSA) library(tidyr)
2. 生成显著性分组字母
基于Kruskal-Wallis检验的事后比较结果,生成用于标记的显著性字母:
# 执行Kruskal-Wallis检验 kruskal.test(mean_severity ~ month, data = dat) # 进行Dunn事后检验(适配非参数检验的两两比较) dunn_result <- dunnTest(mean_severity ~ month, data = dat, method = "bonferroni") # 整理p值格式,适配multcompView要求 p_matrix <- dunn_result$res %>% select(Comparison, P.adj) %>% separate(Comparison, into = c("group1", "group2"), sep = " - ") %>% pivot_wider(names_from = group2, values_from = P.adj) %>% column_to_rownames("group1") # 生成显著性字母分组 sig_letters <- multcompLetters(p_matrix, threshold = 0.05)$Letters # 转换为数据框,方便后续绘图使用 letter_df <- data.frame( month = names(sig_letters), sig_label = as.character(sig_letters), stringsAsFactors = FALSE )
3. 绘图并添加显著性字母
先绘制基础的ggstatsplot图形,再叠加显著性字母:
# 绘制Kruskal-Wallis图,关闭默认的p值条形 base_plot <- ggbetweenstats( data = dat, x = month, y = mean_severity, type = "nonparametric", # 指定非参数检验类型 pairwise.comparisons = FALSE, # 关闭默认两两比较标记 pairwise.display = "none", centrality.plotting = FALSE # 可选:关闭中心趋势线/点 ) # 添加显著性字母到图形上方 final_plot <- base_plot + geom_text( data = letter_df, aes(x = month, y = max(dat$mean_severity) + 6, label = sig_label), size = 5, fontface = "bold" ) # 展示图形 final_plot
注意事项
- 调整
geom_text中的y = max(dat$mean_severity) + 6参数可以改变字母的垂直位置,根据你的数据范围灵活修改 - 如果需要调整图形样式,可以修改
ggbetweenstats的参数(例如plot.type = "box"切换为箱线图)
内容的提问来源于stack exchange,提问作者Ahsk
相关产品推荐
相关产品推荐

