ggplot2图表添加p值

R语言
可视化
让ggplot2图形具有GraphPad Prism的风格,并快捷的添加P值
作者

不止BI

发布于

2023年10月15日

R语言是数据分析和可视化领域的强大工具,其中ggplot2包是R语言中最流行的可视化包之一。今天和大家分享几种在ggplot2绘制的图表上添加p值的方法。ggplot2 Playground为你提供了基于webr的在线执行R代码的方法,里面包含了本文示例及其他图表模板

绘制箱线图

ggprism包是ggplot2的扩展包,提供了各种主题、配色方案和其他功能,可以让ggplot2图形具有GraphPad Prism的风格

使用iris数据集,用Species作为x轴,Petal.Width作为y轴,绘制箱线图,并使用ggprism包的 theme_prism() 设置GraphPad Prism风格的主题

# 如果未安装执行以下安装R包
# install.packages(c('ggplot2','ggprism','ggsignif','patchwork'))
library(tidyverse)
library(ggprism)
library(patchwork)
library(ggsignif)
iris %>% ggplot(aes(x = Species, y = Petal.Width, fill = Species)) +
  geom_boxplot() +
  theme_prism()

添加p值

添加P值有2种不同的方法

ggsignif包

使用 ggsignif 包的 geom_signif 为上面的箱线图添加P值,每个 ggsignif 图层只能添加一组对比的p值,如果需要添加多组,则需要添加多个图层

ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species)) +
  geom_boxplot(show.legend = F) +
  geom_signif(
    comparisons = list(c("setosa", "versicolor")),
    map_signif_level = TRUE
  ) +
  geom_signif(
    comparisons = list(c("versicolor", "virginica")),
    map_signif_level = TRUE
  ) +
  theme_prism()

geom_signifggsignif包中用于添加显著性标记的函数。以下是主要参数的作用:

  • comparisons :需要进行比较的组合列表,每个元素为长度为 2 的向量,指明要比较的两列名称或索引。

  • test :进行统计检验的函数名称,如 t.test、wilcox.test 等。

  • test.args :统计检验函数的额外参数。

  • annotations :自定义注释的文本向量,如果非空则忽略 test 参数。

  • map_signif_level :是否直接显示 p 值,或使用星号表示显著性水平。可以为布尔值、命名的数值向量(定义自定义映射),或函数(接收 p 值并返回字符串)。

  • y_position :括号的 y 轴位置。

  • xmin, xmax :括号的左右两侧位置。

  • margin_top :括号起始位置高于最大值的比例。

  • step_increase :每个额外比较的纵向偏移量,用于避免重叠。

  • tip_length :指示精确列的下指箭头长度占总高度的比例。

  • size :括号线条的宽度。

  • textsize :注释文本的字号。

  • family :注释文本的字体。

  • vjust :垂直调整注释文本的位置。

  • parse :是否将标签解析为表达式。

  • manual :是否手动提供参数数据框。

ggprism

使用ggprism包的add_pvalue()函数,该函数可以从数据框中获取显著检验结果,同时添加多个分组的显著检验线,示例如下:

library(rstatix)

Attaching package: 'rstatix'
The following object is masked from 'package:stats':

    filter
df_p_val <- iris %>%
  t_test(Sepal.Length ~ Species) %>%
  add_xy_position()

ggplot(iris, aes(x = factor(Species), y = Sepal.Length)) +
  geom_boxplot(aes(fill = Species)) +
  add_pvalue(df_p_val) +
  theme_prism()

数据框参数:

  • data: 包含要绘制的统计数据的数据框。默认格式包括以下列:group1 | group2 | p.adj | y.position | 等等。group1 和 group2 是进行比较的两组。p.adj 是校正后的 p 值。y.position 是指定 p 值在图上位置的 y 坐标。列名可以与默认值不同,只要在调用函数时指定即可。 文本和位置参数:

  • label: 指定要绘制的文本的列名(例如 label = “p.adj”)。也可以是可以被 glue 格式化的表达式(例如 label = “p = {p.adj}”)。 xmin: 指定括号左侧位置的列名。默认为 “group1”。 xmax: (可选)指定括号右侧位置的列名。默认为 “group2”。如果为 NULL,则 p 值仅显示为文本。 x: 仅当绘制不带括号的 p 值文本时使用。指定 p 值文本的 x 坐标。 y.position: 包含每个 p 值的 y 坐标(数值)的列名。也可以是一个数值,将所有 p 值绘制在同一高度,或一个数值向量来覆盖数据框中的 y.position 列。

文本格式参数:

  • parse: 默认为 FALSE。如果为 TRUE,文本标签将被解析为表达式并按照 plotmath 中的描述显示。

  • label.size: 文本大小。 colour, color: 文本颜色。

括号参数:

  • tip.length: 括号尖端的长度。使用 0 移除尖端。 bracket.size: 括号线宽。

  • bracket.color: 括号颜色。默认为 NULL,这会使括号继承文本的颜色。

  • bracket.shorten: 稍微缩短括号,以便它们可以并排绘制在相同的 y 位置。

  • bracket.nudge.y: 更改 p 值的 y 位置。如果文本被截断,可用于稍微调整 p 值。

  • step.increase: 更改括号之间的空间。

  • step.group.by: 用于对括号进行分组的变量。

  • remove.bracket: 如果为 TRUE,则移除所有括号,仅显示 p 值文本。

总结

  • ggprism包的 theme_prism() 设置GraphPad Prism风格的主题

  • ggsignif 包的 geom_signif 可以逐个添加P值

  • 使用ggprism包的add_pvalue()函数,该函数可以从数据框中获取显著检验结果,同时添加多个分组的显著检验线

回到顶部