(一)微生物数据
包含两类:正常normal和患癌tumor样本,微生物相对丰度数据;截取部分如下:
(二)使用R语言绘制箱线图
拿到正常样本和患癌样本的微生物丰度数据之后,如何用R语言绘制箱线图做差异分析?如何绘制两类样本的小提琴图?箱线图横轴如何按照中位数排序?本程序根据10种具有显著差异的微生物丰度数据绘制了两类样本的箱线图及小提琴图。
关键程序如下:
- 读取数据并转换
由于原始数据每一列是一种微生物,我们画图时需要先把数据转换成三列,一列代表样本类型(normal/tumor),第二列代表微生物种类,第三列代表对应的丰度值。
getwd()
setwd("数据存放工作目录")
library(reshape2)
library(ggplot2)
library(tibble)
library(ggpubr)
#--------------------------------微生物箱线图
zhong<-read.csv("./top_10.csv",sep=",",header = T,check.names=F)
zhong<-melt(zhong,id='state')
colnames(zhong)[2:3]<-c("species","abundant")
zhong$state<-factor(zhong$state,levels = c("normal","cancer"),ordered = T)
其中,数据转换的关键语句为melt(数据集,索引列),转换之后规范列名,如下:
2. 绘制箱线图并通过xlable进行排序
这里使用factor函数,按照levels强制对坐标轴排序
zhong$species <- factor(zhong$species,levels=c("Magnetobacteriaceae","Vibrio galatheae","Marithrix","Desulfobulbaceae","Rhizobiaceae",等......))
p1<-ggplot(zhong, aes(x=species, y=abundant,fill=state))+
geom_boxplot(outlier.shape = NA)+xlab("(a) Bacterial names")+ylab("Relative Abundance")+theme_bw()+ylim(0,0.02)+
scale_fill_manual(name="Sample type", labels = c("Normal","Cancer"),
values = c("forestgreen","tomato"),ylim(0,0.02))+
theme(legend.justification = "center",legend.position = "top")+
theme(axis.text.x = element_text(angle=45,hjust = 1, vjust = 1, colour = "black",face="italic",size=9),axis.text.y = element_text(colour = "black",size=10))
theme(legend.title = element_text(face="italic",size=10))+theme(axis.text.y = element_text(colour = "black",size=9))
输出结果已经按照中位数进行排序;横坐标是微生物,至于每种微生物的两个箱线图上方的**符号如何添加,很简单,大家自己可以尝试。小提琴图的绘制方法类似,只需要函数geom_violin即可。
本文所讲的程序方法已经上传了完整的程序文件,有需要的可以参考微生物相对丰度的箱线图、小提琴图-R语言程序(可运行)