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

如何修改ggstatsplot图中p值与n标签、格式化p值及获取检验方法

ggbarstats 标签问题与统计逻辑说明

标签重叠调整方案

两类标签都可以通过函数内置参数直接调整,不需要手动重绘:

  • 柱顶p值标签:通过label.args参数修改字号、偏移量、角度
  • 柱底样本量n标签:通过n.label.args参数做同类调整
    参考调整代码:
Myplot <- ggbarstats(
  data             = movies_long,
  x                = mpaa,
  y                = year,
  title            = "Distribution of movies per year",
  xlab             = "year",
  legend.title     = "",
  ggplot.component = list(ggplot2::scale_x_discrete(guide = ggplot2::guide_axis(n.dodge = 2))),
  palette          = "Set2",
  # 调整柱顶p值标签
  label.args = list(
    size = 3,        # 缩小标签字号
    nudge_y = 0.05,  # 向上偏移,和柱顶拉开间距
    angle = 45,      # 标签旋转45度,避免横向重叠
    hjust = 0        # 旋转后对齐方式调整
  ),
  # 调整柱底样本量标签
  n.label.args = list(
    size = 2.5,      # 缩小样本量字号
    nudge_y = -0.03  # 向下偏移,和柱底拉开间距
  )
)

如果内置参数调整后仍不符合需求,可以用ggplot2::ggplot_build(Myplot)提取绘图对象的图层数据,手动修改对应标签的坐标、文本内容后,再用ggplot2::ggplot_gtable()重构图形即可。

p值简化格式设置

支持自定义p值展示格式,不需要额外复刻。你可以先写好自定义格式化函数,传入参数即可自动生成p<0.001、p<0.1这类简化标签,示例格式化函数:

custom_p_fmt <- function(p_val) {
  dplyr::case_when(
    p_val < 0.001 ~ "p<0.001",
    p_val < 0.01 ~ "p<0.01",
    p_val < 0.05 ~ "p<0.05",
    p_val < 0.1 ~ "p<0.1",
    TRUE ~ paste0("p=", round(p_val, 2))
  )
}

将这个函数传入label.args的label.fns参数项,即可替换默认的精确p值展示。

内置统计检验逻辑

如果需要手动用ggplot2复刻,可以直接参考ggbarstats的默认检验规则:

  • 你当前使用的是分类变量列联表场景,默认采用 Pearson卡方独立性检验,检验对应年份下不同mpaa评级的分布是否存在差异
  • 当列联表存在单元格期望频数<5的小样本情况时,会自动切换为Fisher精确检验
  • 如果开启bf.message = TRUE参数,会额外输出贝叶斯列联表检验的贝叶斯因子结果
    所有柱形对应的p值、检验中间结果,都可以直接运行ggstatsplot::extract_stats(Myplot)直接提取,不需要手动重新计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:01:48