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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:52:34