其他
R可视化—基于R语言进行显著性标记常见方法!
数据的显著性比较及可视化过程中的标记是数据处理过程中很重要的一部分内容,这期内容小编带来的内容就是基于R语言进行数据的显著性比较及可视化,虽不全面但足以应付日常数据处理!
用到的包主要如下,比较重要的几个包如ggsignif、ggpubr、agricolae:
###科研后花园####
####@wzs#####
rm(list=ls())#clear Global Environment
setwd('D:/桌面/显著性标记')#设置工作目录
#加载R包
library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphics
library(tidyverse) # Easily Install and Load the 'Tidyverse'
library(agricolae) # Statistical Procedures for Agricultural Research
library(car) # Companion to Applied Regression
library(reshape2) # Flexibly Reshape Data: A Reboot of the Reshape Package
library(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$group
GB<- 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)#合并数据
#定义label
label<-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
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 Environment
setwd('D:/桌面/SCI论文写作与绘图/R语言绘图/绘图技巧/显著性标记')#设置工作目录
#加载R包
library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphics
library(tidyverse) # Easily Install and Load the 'Tidyverse'
library(agricolae) # Statistical Procedures for Agricultural Research
library(car) # Companion to Applied Regression
library(reshape2) # Flexibly Reshape Data: A Reboot of the Reshape Package
library(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$group
GB<- 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)#合并数据
#定义label
label<-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)
好看你就
点点
我