查看原文
其他

R可视化—数据的多重比较及字母标记

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

点击订阅关注我哦



效果图





代码


1、设置工作变量

rm(list=ls())#clear Global Environmentsetwd('D:\\桌面\\wzs')#设置工作目录

2、R包的安装及加载

#安装包install.packages("ggplot2")install.packages("agricolae")install.packages("tidyverse")install.packages("car")install.packages("reshape2")install.packages("ggprism")#加载R包library(ggplot2)#绘图包library(tidyverse)#数据处理包library(agricolae)#实现多重比较的包library(car)#回归诊断的包library(reshape2)#处理数据的包library(ggprism)#提供了GraphPad prism风格的主题和颜色,主要用于美化我们的图形

3、加载数据及数据预处理

##导入数据# df <- read.table("index.txt",header = T, row.names = 1, check.names = F)#这里使用我自己随机编写的数据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(6,8,8,12,5,8,7,6,8,14), E = c(20,15,14,16,10,22,18,10,11,12))#预览数据head(df)#使用tidyverse包对数据进行处理df <- df %>% gather(key = 'group',value = 'values') #gather()函数可以把多列数据合并成一列数据#预览数据head(df)

4、数据的正态检验

#检验是否符合正态分布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,因此接受原假设:样本之间的方差是相同的。因此可以接着做方差分析了。

5、数据的方差检验

variance<-aov(values ~ group, data=df)variance

6、数据的多重比较

#进行多重比较,不矫正P值MC <- LSD.test(variance,"group", p.adj="none")#结果显示:标记字母法out$groupGB<- group_by(df,group)#数据转换error <- summarise(GB,sd(values,na.rm = T))#计算误差

7、数据的整理

#整理数据error2 <- merge(error ,MC$group,by.x="group",by.y = "row.names",all = F)#合并数据

8、绘图

#定义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')#去除图例p1

9、拓展

和上一次绘制的显著性标记图合并:

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

#加载包library(ggpubr)#基于ggplot2的可视化包,主要用于绘制符合出版要求的图形library(ggsignif)#用于P值计算和显著性标记
#准备数据# df <- read.table("data.txt",header = T, check.names = F)#自己随机编写的数据df1 <- 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(df1)#使用tidyverse包对数据进行处理df1 <- df1 %>% gather(key = 'group',value = 'values') #gather()函数可以把多列数据合并成一列数据
head(df1)#预览数据#绘图p2 <- ggplot(df1,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))+#图例位置 # scale_fill_manual(values=c("#ffc000","#a68dc8","blue"))+#指定颜色 geom_jitter(width = 0.2)+#添加抖动点 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="red")+ ggtitle("boxplot")#标题# geom_dotplot(binaxis = "y", stackdir = "center",position="jitter",dotsize = 0.4)#使得抖动点居中显示p2
p3<-p2 + 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")+ theme(legend.position = 'none')#去除图例p3
#拼图library(patchwork)p1+p3

最后将图导出PDF,使用PS或者AI进行微调即可

END


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





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

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

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

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



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

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