欢迎关注R语言数据分析指南
❝经常遇到有读者询问一个问题如何给图形添加p值,在R中理解统计分析才是最主要的内容,而将统计结果添加到图形上则非常的简单,R中有几款非常成熟的包可以很轻松的解决此类问题。本节只介绍最常见的几种类型图,当然方法都是一致的,一通百通。详细的内容请参考下方几款R包的官方文档
主要使用R包
❝1.ggprism该包内的 add_pvalue() 可以将已经统计好的结果添加到图表上,常见的统计分析使用rstatix均可完成。
2.ggpubr该包内的 stat_pvalue_manual() 也可以将已经统计好的结果添加到图表上。
3.ggsignif该包内的 geom_signif() 会自动的完成统计分析及p值添加整个过程,该包经过更新后目前自定义更高。
library(tidyverse)
# install.packages("ggprism")
library(ggprism)
library(ggsignif)
library(rstatix)
library(ggpubr)
ggprism官方文档
https://csdaw.github.io/ggprism/articles/pvalues.html
案例展示
df_p_val <- ToothGrowth %>%
rstatix::group_by(factor(dose)) %>%
rstatix::t_test(len ~ 1, mu = 26) %>%
rstatix::adjust_pvalue(p.col = "p", method = "holm") %>%
rstatix::add_significance(p.col = "p.adj")
p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
stat_summary(geom = "col", fun = mean) +
stat_summary(geom = "errorbar",
fun = mean,
fun.min = function(x) mean(x) - sd(x),
fun.max = function(x) mean(x) + sd(x),
width = 0.3) +
theme_prism() +
coord_cartesian(ylim = c(0, 40)) +
scale_y_continuous(breaks = seq(0, 40, 5), expand = c(0, 0))
# remember xmin and x are referring to the column dames in df_p_val
p + add_pvalue(df_p_val,
xmin = "group1",
x = "factor(dose)",
y = 37,
label = "p.adj.signif")
df_p_val <- rstatix::t_test(ToothGrowth, len ~ dose)
p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_violin(trim = FALSE,aes(fill=factor(dose)),show.legend = F) +
geom_boxplot(width = 0.2) +
theme_prism() +
coord_cartesian(ylim = c(0, 45)) +
scale_y_continuous(breaks = seq(0, 45, 5), expand = c(0, 0))
p + add_pvalue(df_p_val,
y.position = c(44, 41, 44),
bracket.shorten = c(0.025, 0, 0.025))
分组比较
df_p_val1 <- ToothGrowth %>%
rstatix::group_by(dose) %>%
rstatix::t_test(len ~ supp) %>%
rstatix::adjust_pvalue(p.col = "p", method = "bonferroni") %>%
rstatix::add_significance(p.col = "p.adj") %>%
rstatix::add_xy_position(x = "dose", dodge = 0.8) # important for positioning!
df_p_val2 <- rstatix::t_test(ToothGrowth, len ~ dose,
p.adjust.method = "bonferroni") %>%
rstatix::add_xy_position()
p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(aes(fill = supp)) +
theme_prism() +
coord_cartesian(ylim = c(0, 45))
p + add_pvalue(df_p_val1,
xmin = "xmin",
xmax = "xmax",
label = "p = {p.adj}",
tip.length = 0) +
add_pvalue(df_p_val2,
label = "p = {p.adj}",
tip.length = 0.01,
bracket.nudge.y = 2,
step.increase = 0.015)
ggpubr官方文档
https://rpkgs.datanovia.com/ggpubr/reference/stat_pvalue_manual.html
stat.test2 <- ToothGrowth %>% mutate(dose=as.factor(dose)) %>% group_by(dose) %>%
t_test(len ~ supp) %>%
adjust_pvalue() %>% add_significance("p.adj") %>% add_xy_position(x="dose")
stat.test3 <- ToothGrowth %>%
t_test(len ~ dose,p.adjust.method = "bonferroni") %>%
adjust_pvalue() %>% add_significance("p.adj") %>% add_xy_position()
res.aov <- ToothGrowth %>% mutate(dose=as.factor(dose)) %>% anova_test(len ~ dose)
ToothGrowth %>% mutate(dose=as.factor(dose)) %>%
ggplot(aes(dose,len)) +
stat_boxplot(geom = "errorbar",width=0.2,
aes(fill = supp),position = position_dodge(1)) +
geom_boxplot(aes(fill= supp),position = position_dodge(1)) +
stat_pvalue_manual(stat.test2,label = "p.adj.signif",label.size=6,hide.ns = T) +
stat_pvalue_manual(stat.test3,label = "p.adj.signif",label.size=6,hide.ns = T)+
labs(subtitle = get_test_label(res.aov, detailed = TRUE))+
scale_y_continuous(expand=c(0,0),limits = c(0,42))+
theme_classic()
ggsignif官方文档
https://github.com/const-ae/ggsignif?tab=readme-ov-file
dat <- data.frame(
Group = c("S1", "S1", "S2", "S2"),
Sub = c("A", "B", "A", "B"),
Value = c(3, 5, 7, 8)
)
ggplot(dat, aes(Group, Value)) +
geom_bar(aes(fill = Sub), stat = "identity", position = "dodge", width = .5) +
geom_signif(
y_position = c(5.3, 8.3), xmin = c(0.8, 1.8), xmax = c(1.2, 2.2),
annotation = c("**", "NS"), tip_length = 0
) +
geom_signif(
comparisons = list(c("S1", "S2")),
y_position = 9.3, tip_length = 0, vjust = 0.2
) +
scale_fill_manual(values = c("grey80", "grey20"))
关注下方公众号下回更新不迷路
购买介绍
❝本节介绍到此结束,有需要学习R数据可视化的朋友欢迎到淘宝店铺:R语言数据分析指南,购买小编的R语言可视化文档(2024版),购买将赠送2023年的绘图文档内容。目前此文档(2023+2024)已经更新上传200案例文档,每个案例都附有相应的数据和代码,并配有对应的注释文档,方便大家学习和参考。
2024更新的绘图内容将同时包含数据+代码+注释文档+文档清单,2023无目录仅有数据文件夹,小编只分享案例文档,不额外回答问题,无答疑服务,零基础不推荐买。
案例特点
所选案例图均属于个性化分析图表完全适用于论文发表,内容异常丰富两年累计发布案例图200+,2024年6月起提供html版注释文档更加直观易学。文档累计上千人次购买拥有良好的社群交流体验。R代码结构清晰易懂,为防止中文乱码提供单独的注释文档

R代码结构清晰易懂,为防止中文乱码2024年6月起提供单独html注释文档
群友精彩评论
淘宝店铺

2024年已更新案例图展示














































2023年案例图展示











