查看原文
其他

R可视化——箱线图绘制及显著性标记

王志山 科研后花园 2023-09-08

 在大家阅读文献的过程中,有时候会碰到下图所示的这种带有显著性标记的柱状图或者箱线图,这种图是怎么做出来的呢?今天,小编就使用R语言教大家如何绘制这样一张带有显著性标记的箱线图!




01 准备数据


       这里我们使用自己编写的数据,大家也可以导入自己准备数据:

#自己随机编写的数据df <- data.frame( A = c(2,5,6,5,4,8,6,3,8,9), B = c(15,10,5,18,12,13,16,14,10,9), C = c(1,3,6,5,2,3,6,2,4,1))#预览数据head(df)


02 加载包并对数据进行预处理


       首先,介绍一下使用到的R包:

#安装包install.packages("ggplot2")install.packages("ggpubr")install.packages("ggsignif")install.packages("tidyverse")install.packages("ggprism")#加载包library(ggplot2)#绘图包library(ggpubr)#基于ggplot2的可视化包,主要用于绘制符合出版要求的图形library(ggsignif)#用于P值计算和显著性标记library(tidyverse)#数据预处理library(ggprism)#提供了GraphPad prism风格的主题和颜色,主要用于美化我们的图形

        处理数据,将我们之前生成的数据合并为一列,用于后续作图,当然,大家也可以按照处理完成的数据格式准备您的数据,省略这一步,之后直接导入即可:

#使用tidyverse包对数据进行处理df <- df %>%   gather(key = 'group',value = 'values') #gather()函数可以把多列数据合并成一列数据head(df)#预览数据



03 绘图


       我们先绘制箱线图:

ggplot(df,aes(x=group,y=values))+#指定数据 stat_boxplot(geom = "errorbar", width=0.1,size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(aes(fill=group), #绘制箱线图函数 outlier.colour="white",size=0.8


对图片进行简单美化,显示数据点:

p<-ggplot(df,aes(x=group,y=values))+#指定数据 stat_boxplot(geom = "errorbar", width=0.1,size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(aes(fill=group), #绘制箱线图函数 outlier.colour="white",size=0.8)+#异常点去除 theme(panel.background =element_blank(), #背景 axis.line=element_line(),#坐标轴的线设为显示        legend.position="none",plot.title = element_text(size=14))+#图例位置 geom_jitter(width = 0.2)+#添加抖动点 ggtitle("boxplot")#标题p


04 添加显著性标记


       计算p值并将其添加至图中:

p <- p + geom_signif(comparisons = list(c("A","B"),c("A","C"),c("B","C")),#设置需要比较的组 test = t.test, ##计算方法              y_position = c(23,30,26),#图中横线位置设置 tip_length = c(c(0.05,0.05),c(0.05,0.05),c(0.05,0.05)),#横线下方的竖线设置 size=0.8,color="black")

 

     将图中显示的p值使用我们常见的“*”、“**”、“***”替换掉,可以用map_signif_level = T/F进行设置,其中"***"=0.001, "**"=0.01, "*"=0.05:

p <- p + geom_signif(comparisons = list(c("A","B"), c("A","C"), c("B","C")),# 设置需要比较的组 map_signif_level = T, #是否使用*显示 test = t.test, ##计算方法              y_position = c(23,30,26),#图中横线位置设置 tip_length = c(c(0.05,0.05), c(0.05,0.05), c(0.05,0.05)),#横线下方的竖线设置 size=0.8,color="black")



05 对图片进行美化


       这里我们主要使用ggprism包对图片进行美化:

p + theme_prism(palette = "candy_bright", base_fontface = "plain", # 字体样式,可选 bold, plain, italic base_family = "serif", # 字体格式,可选 serif, sans, mono, Arial等 base_size = 16, # 图形的字体大小 base_line_size = 0.8, # 坐标轴的粗细 axis_text_angle = 45)+ # 可选值有 0,45,90,270 scale_fill_prism(palette = "candy_bright")

     ggprism包自带了很多的好看的主题,大家可以自己通过其中的参数设置得到自己的个性化图片:

p + theme_prism(palette = "ocean", base_fontface = "plain", # 字体样式,可选 bold, plain, italic base_family = "serif", # 字体格式,可选 serif, sans, mono, Arial等 base_size = 16, # 图形的字体大小 base_line_size = 0.8, # 坐标轴的粗细 axis_text_angle = 45)+ # 可选值有 0,45,90,270 scale_fill_prism(palette = "ocean")

p + theme_prism(palette = "flames", base_fontface = "plain", # 字体样式,可选 bold, plain, italic base_family = "serif", # 字体格式,可选 serif, sans, mono, Arial等 base_size = 16, # 图形的字体大小 base_line_size = 0.8, # 坐标轴的粗细 axis_text_angle = 45)+ # 可选值有 0,45,90,270 scale_fill_prism(palette = "flames")



大家如果需要完整代码,请在后台回复boxplot_p即可获得下载链接!




以上就是今天所有的内容,希望对您有所帮助!!!


大家如果有什么问题请在后台留言,小编看到后会在第一时间回复


欢迎大家点赞转发并点亮,让更多朋友看到!

也欢迎大家关注我的公众号


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存