R之箱线图绘制
16s分析一直在连载,但是最基础的莫过于alpha多样性了,但是箱线图却不是alpha多样性的唯一选择,箱线图也不是局限于alpha多样性,这里借助alpha多样性,将箱线图做一个完整绘制
#这里安装的这个包就是做显著性分析的
#install.packages("ggpubr")安装包
library("ggplot2")
library("ggpubr")
setwd("E:/Shared_Folder/HG_usearch_HG")
# 读入实验设计和Alpha多样性值
design =read.table("map_lxdjhg.txt", header=T, row.names= 1,sep="\t")
alpha =read.table("alpha8825.txt", header=T, row.names= 1,sep="\t")
head(design)
head(alpha)
#合并数据框,按照列,all=F,表示只取两者共有列名的数据
index =merge(alpha, design,by="row.names",all=F)
head(index)
方便大家学习,这里给出index数据窗口:
#添加作图变量,使用geom_boxplot()不修改任何参数,出图,似乎也挺好看的!
ggplot(index,aes(x=SampleType, y=chao1, color=SampleType))+
geom_boxplot()
但是我们还不够满意!继续:
#我们让所有样本点都显示出来
ggplot(index,aes(x=SampleType, y=chao1, color=SampleType))+
geom_boxplot()+geom_jitter()
似乎很凌乱,这里咱们有办法:
可以通过设置“jitter”参数来调整数据的分布:geom_jitter(position=position_jitter(0.5))
position_jitter用来调整数据的凌乱程度,数值越大越凌乱。
#我们数据量比较少,设置紧密一点既可以达到美观的
ggplot(index,aes(x=SampleType, y=chao1, color=SampleType))+
geom_boxplot()+geom_jitter(position=position_jitter(0.15))
这张图出来我们发现异常了,我明明只有九个点,为什么有的组会多几个点呢,原来是箱线图将原来异常值的点算了两次,这里我们去掉原来异常值的点:alpha=0为什么选用这个命令呢,因为这里咱们还要使用,点的颜色和箱线图相冲,这个命令可以调节透明度,弱化点的存在:
#我们的点不需要这么亮,于是设置透明度为alpha:0.4
ggplot(index,aes(x=SampleType, y=chao1, color=SampleType))+
geom_boxplot(alpha=0)+geom_jitter(position=position_jitter(0.17),alpha=0.4)
问题又来了,箱线图箱子很细,不好看:
#加上我们自己设定的标签
ggplot(index,aes(x=SampleType, y=chao1, color=SampleType))+
geom_boxplot(alpha=0,size=0.8, width=0.5)+
geom_jitter(position=position_jitter(0.15),alpha=0.6,size=1.2)+
labs(x="Groups", y="chao1index")
size=0.8:调整箱子厚度
width=0.5:调整箱子宽度
size=1.2:调整点的大小
调整一下外观:
p<-ggplot(index,aes(x=SampleType, y=chao1, color=SampleType))+
geom_boxplot(alpha=0,size=0.8, width=0.5)+
geom_jitter(position=position_jitter(0.15),alpha=0.6,size=1.2)+
labs(x="Groups", y="chao1index")
p+theme_classic()
有些小伙伴可能有分面的需求,这里我选了一部分观测,来做分面,一个分面只有一个箱子,当然要有多个箱子,就把多个箱子分为一组就好了,
#取三组观测
index1<-index[index$SampleType%in%c("GF1","GC1","G0"),]#多个字符串就要用这个%in%c
head(index1)
p<-ggplot(index1,aes(x=SampleType, y=chao1, color=SampleType))+
geom_boxplot(alpha=0,size=0.8, width=0.5)+
geom_jitter(position=position_jitter(0.15),alpha=0.6,size=1.2)+
labs(x="Groups", y="chao1index")
#分面命令facet_grid
p+ facet_grid(.~SampleType)
到这里,箱线图就说的差不多了,但是作为科研用图,统计自然少不了,然我们来为自己的箱子做统计分析吧:
这里推荐包ggpubr,这里用参数检验和非参数检验方法
图片来自R语言可视化学习笔记之添加p-value和显著性标记,Easycharts公众号
head(index)
#默认为"wilcox.test"这是两组的非参数检验,微生物生态方面我们常用非参数检验,但是这里我们是多个组的,因此,更改为Kruskal-Wallis检验
compare_means(shannon~SampleType,data=index, paired = TRUE,method = "kruskal.test")
结果如下,多组间是显著的:
#在这里我们就两两检验,看看那些组显著:
df_summarise<-compare_means(shannon~SampleType,data=index, paired = TRUE)
# compare_means的计算是以tbl格式返回的,我们可以转成dataframe
df_summarise<-as.data.frame(df_summarise)
setwd("L:/#R语言学习/测试数据")
write.table(df_summarise,"alpha—wilcox.test.txt",quote= FALSE,row.names = T,
col.names = T,sep = "\t")
输出表格,使用excel查看:(这里没有必要输出第一列,可以设置row.names = F)
但是ggpubr包提供了更加方便的方式将这些显著性结果展示在图上
#多组检验,设置合适的坐标
p+theme_classic()+stat_compare_means(method= "kruskal.test",label.x = 1.5, label.y = 2900)
#不只是多组检验,我们选择关注的两组检验
my_comparisons<- list(c("GC1", "GF1"), c("GC5","GF5"))
#这里我们由于选择了要两组比较的组,所以为了出图美观,将横坐标进行了一个排序,做显著性将不显著的组hide.ns = T隐藏,由于在做多组比较是出错,无法和排序命令一起使用,所以这里我人工添加多组比较结果
p+theme_classic()+scale_x_discrete(limits=c("G0","GC1","GF1","GC5","GF5","GN1","GN5"))+
stat_compare_means(comparisons=my_comparisons,label ="p.signif",hide.ns = T)+
annotate("text",x=1.7,y=2200,parse=TRUE,size=4,label="'kruskal.test:'*5.3e-09",family="serif",fontface="italic",colour="darkred")
到这里就快完成了,我们加上保存命令,再次重新出图:
# res = 300分辨率,units="mm"高度和宽度的单位#发文章中要求的格式和一些其他参数设置如上
tiff(file="alpha_chao1.tif",res = 300, compression = "none", width=180,height=140,units="mm")
p<-ggplot(index,aes(x=SampleType, y=chao1, color=SampleType))+
geom_boxplot(alpha=0,size=0.8, width=0.5)+
geom_jitter(position=position_jitter(0.15),alpha=0.6,size=1.2)+
labs(x="Groups", y="chao1index")
p+theme_classic()+scale_x_discrete(limits=c("G0","GC1","GF1","GC5","GF5","GN1","GN5"))+
stat_compare_means(comparisons=my_comparisons,label= "p.signif",hide.ns = T)+
annotate("text",x=1.7,y=2200,parse=TRUE,size=4,label="'kruskal.test:'*5.3e-09",family="serif",fontface="italic",colour="darkred")
dev.off()#这条命令必须加上才可以得到保存的图片
学习永无止境,分享永不停歇!