如何修改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
相关产品推荐
相关产品推荐

