查看原文
其他

R可视化—基于R语言进行显著性标记常见方法!

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

       数据的显著性比较及可视化过程中的标记是数据处理过程中很重要的一部分内容,这期内容小编带来的内容就是基于R语言进行数据的显著性比较及可视化,虽不全面但足以应付日常数据处理!

加载R包


用到的包主要如下,比较重要的几个包如ggsignif、ggpubr、agricolae:

###科研后花园########@wzs#####
rm(list=ls())#clear Global Environmentsetwd('D:/桌面/显著性标记')#设置工作目录
#加载R包library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphicslibrary(tidyverse) # Easily Install and Load the 'Tidyverse'library(agricolae) # Statistical Procedures for Agricultural Researchlibrary(car) # Companion to Applied Regressionlibrary(reshape2) # Flexibly Reshape Data: A Reboot of the Reshape Packagelibrary(ggprism) # A 'ggplot2' Extension Inspired by 'GraphPad Prism'library(ggsignif) # Significance Brackets for 'ggplot2'library(ggpubr) # 'ggplot2' Based Publication Ready Plots



数据


这里随便构建四组数据:

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), D = c(20,15,14,16,10,22,18,10,11,12))#预览数据head(df)

数据预处理:

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





字母标记法


#检验是否符合正态分布#qqPlot(lm(df$values ~ df$group, data=df), simulate=TRUE, main="Q-Q Plot", lables=FALSE)
##数据的正态检验shapiro.test(df$values)
# Bartlett检验bartlett.test(df$values ~ df$group, data=df)# Levene检验,对原始数据的正态性不敏感leveneTest(df$values ~ df$group, data=df)#无论Bartlett检验还是Levene检验,两者的P值都大于0.05#因此接受原假设:样本之间的方差是相同的。因此可以接着做方差分析了。
######方差检验########variance<-aov(values ~ group, data=df)variance
#进行多重比较,不矫正P值MC <- LSD.test(variance,"group", p.adj="none")#结果显示:标记字母法out$groupGB<- group_by(df,group)#数据转换error <- summarise(GB,sd(values,na.rm = T))#计算误差#整理数据error2 <- merge(error ,MC$group,by.x="group",by.y = "row.names",all = F)#合并数据
#定义labellabel<-error2$groups#绘图p1<-ggplot(df,aes(group,values,fill=group))+#指定数据及坐标数据 stat_boxplot(geom = "errorbar", width=0.1, size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(position="dodge")+#绘制箱线图函数 ggtitle("boxplot")+#标题 geom_text(data=error2,aes(x=group,y=values+9,label=label),color="red",fontface="bold")+#添加字母标记 geom_jitter(alpha=0.8,width = 0.2,size=1)+#添加抖动点 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包修改颜色 theme(legend.position = 'none')+#去除图例 scale_y_continuous(limits = c(0,30))p1





根据P值进行标记


1、显示组间p值的标记方法

df$group <- factor(df$group,levels = c("A","B","C","D"))##显示p值p2<-ggplot(df,aes(group,values,fill=group))+#指定数据及坐标数据 stat_boxplot(geom = "errorbar", width=0.1, size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(position="dodge")+#绘制箱线图函数 ggtitle("boxplot")+#标题 geom_signif(comparisons = list(c("A","B"), c("C","D")),# 设置需要比较的组 map_signif_level = F, #是否使用星号显示 test = t.test, ##计算方法 y_position = c(25,25),#图中横线位置设置 tip_length = c(c(0.7,0.3), c(0.8,0.1)),#横线下方的竖线设置 size=1,color="black")+ geom_jitter(alpha=0.8,width = 0.2,size=1)+#添加抖动点 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包修改颜色 theme(legend.position = 'none')+#去除图例 scale_y_continuous(limits = c(0,30))p2

2、使用*号进行差异性标记

p3<-ggplot(df,aes(group,values,fill=group))+#指定数据及坐标数据 stat_boxplot(geom = "errorbar", width=0.1, size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(position="dodge")+#绘制箱线图函数 ggtitle("boxplot")+#标题 geom_signif(comparisons = list(c("A","B"), c("A","D")),# 设置需要比较的组 map_signif_level = T, #是否使用星号显示 test = t.test, ##计算方法 y_position = c(25,28),#图中横线位置设置 tip_length = c(c(0.7,0.3), c(0.8,0.3)),#横线下方的竖线设置 size=1,color="black")+ geom_jitter(alpha=0.8,width = 0.2,size=1)+#添加抖动点 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包修改颜色 theme(legend.position = 'none')+#去除图例 scale_y_continuous(limits = c(0,30))p3

3、显示总体组间差异性

p4<-ggplot(df,aes(group,values,fill=group))+#指定数据及坐标数据 stat_boxplot(geom = "errorbar", width=0.1, size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(position="dodge")+#绘制箱线图函数 ggtitle("boxplot")+#标题 geom_jitter(alpha=0.8,width = 0.2,size=1)+#添加抖动点 stat_compare_means(method = "anova")+ 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包修改颜色 theme(legend.position = 'none')+#去除图例 scale_y_continuous(limits = c(0,30))p4





完整代码


###科研后花园########@wzs#####
rm(list=ls())#clear Global Environmentsetwd('D:/桌面/SCI论文写作与绘图/R语言绘图/绘图技巧/显著性标记')#设置工作目录
#加载R包library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphicslibrary(tidyverse) # Easily Install and Load the 'Tidyverse'library(agricolae) # Statistical Procedures for Agricultural Researchlibrary(car) # Companion to Applied Regressionlibrary(reshape2) # Flexibly Reshape Data: A Reboot of the Reshape Packagelibrary(ggprism) # A 'ggplot2' Extension Inspired by 'GraphPad Prism'library(ggsignif) # Significance Brackets for 'ggplot2'library(ggpubr) # 'ggplot2' Based Publication Ready Plots
#这里使用我自己随机编写的数据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), D = c(20,15,14,16,10,22,18,10,11,12))#预览数据head(df)
#使用tidyverse包对数据进行处理df <- df %>% gather(key = 'group',value = 'values')#gather()函数可以把多列数据合并成一列数据head(df)#预览数据
##########字母标记法#############检验是否符合正态分布#qqPlot(lm(df$values ~ df$group, data=df), simulate=TRUE, main="Q-Q Plot", lables=FALSE)
##数据的正态检验shapiro.test(df$values)
# Bartlett检验bartlett.test(df$values ~ df$group, data=df)# Levene检验,对原始数据的正态性不敏感leveneTest(df$values ~ df$group, data=df)#无论Bartlett检验还是Levene检验,两者的P值都大于0.05#因此接受原假设:样本之间的方差是相同的。因此可以接着做方差分析了。
######方差检验########variance<-aov(values ~ group, data=df)variance
#进行多重比较,不矫正P值MC <- LSD.test(variance,"group", p.adj="none")#结果显示:标记字母法out$groupGB<- group_by(df,group)#数据转换error <- summarise(GB,sd(values,na.rm = T))#计算误差#整理数据error2 <- merge(error ,MC$group,by.x="group",by.y = "row.names",all = F)#合并数据
#定义labellabel<-error2$groups#绘图p1<-ggplot(df,aes(group,values,fill=group))+#指定数据及坐标数据 stat_boxplot(geom = "errorbar", width=0.1, size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(position="dodge")+#绘制箱线图函数 ggtitle("boxplot")+#标题 geom_text(data=error2,aes(x=group,y=values+9,label=label),color="red",fontface="bold")+#添加字母标记 geom_jitter(alpha=0.8,width = 0.2,size=1)+#添加抖动点 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包修改颜色 theme(legend.position = 'none')+#去除图例 scale_y_continuous(limits = c(0,30))p1
##############根据P值进行标记#############df$group <- factor(df$group,levels = c("A","B","C","D"))##显示p值p2<-ggplot(df,aes(group,values,fill=group))+#指定数据及坐标数据 stat_boxplot(geom = "errorbar", width=0.1, size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(position="dodge")+#绘制箱线图函数 ggtitle("boxplot")+#标题 geom_signif(comparisons = list(c("A","B"), c("C","D")),# 设置需要比较的组 map_signif_level = F, #是否使用星号显示 test = t.test, ##计算方法 y_position = c(25,25),#图中横线位置设置 tip_length = c(c(0.7,0.3), c(0.8,0.1)),#横线下方的竖线设置 size=1,color="black")+ geom_jitter(alpha=0.8,width = 0.2,size=1)+#添加抖动点 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包修改颜色 theme(legend.position = 'none')+#去除图例 scale_y_continuous(limits = c(0,30))p2##*号标记p3<-ggplot(df,aes(group,values,fill=group))+#指定数据及坐标数据 stat_boxplot(geom = "errorbar", width=0.1, size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(position="dodge")+#绘制箱线图函数 ggtitle("boxplot")+#标题 geom_signif(comparisons = list(c("A","B"), c("A","D")),# 设置需要比较的组 map_signif_level = T, #是否使用星号显示 test = t.test, ##计算方法 y_position = c(25,28),#图中横线位置设置 tip_length = c(c(0.7,0.3), c(0.8,0.3)),#横线下方的竖线设置 size=1,color="black")+ geom_jitter(alpha=0.8,width = 0.2,size=1)+#添加抖动点 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包修改颜色 theme(legend.position = 'none')+#去除图例 scale_y_continuous(limits = c(0,30))p3
###显示总体组间差异p4<-ggplot(df,aes(group,values,fill=group))+#指定数据及坐标数据 stat_boxplot(geom = "errorbar", width=0.1, size=0.8)+#添加误差线,注意位置,放到最后则这条先不会被箱体覆盖 geom_boxplot(position="dodge")+#绘制箱线图函数 ggtitle("boxplot")+#标题 geom_jitter(alpha=0.8,width = 0.2,size=1)+#添加抖动点 stat_compare_means(method = "anova")+ 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包修改颜色 theme(legend.position = 'none')+#去除图例 scale_y_continuous(limits = c(0,30))p4
###拼图cowplot::plot_grid(p1,p2,p3,p4,ncol = 2)





绘图源码和数据可扫描下方二维码获取或者后台联系作者获取!!!

好看你就

点点

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

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