graphics包的barplot()函数绘制柱状堆叠图

文摘   科学   2024-06-03 09:48   北京  

柱状堆叠图或称条形堆叠图,是一类展示数据结果的重要统计绘图,常用于展示不同样本中微生物的群落组成,在sci文章的数据分析结果中使用频率非常高,有很多在线的网站或者统计软件均能绘制。在R语言中,也有很多包可绘制,比如graphics包barplot()函数和ggplot2包geom_bar()函数。 在这篇文章中,我们给大家讲解使用barplot()函数绘制柱状堆叠图的一些细则和使用技巧,以及提供一个绘制美观的堆叠柱状图的R代码。

barplot()函数基本使用

barplot()函数的基本使用参数:

barplot(height, width = 1, space = NULL,        names.arg = NULL, legend.text = NULL, beside = FALSE,        horiz = FALSE, density = NULL, angle = 45,        col = NULL, border = par("fg"),        main = NULL, sub = NULL, xlab = NULL, ylab = NULL,        xlim = NULL, ylim = NULL, xpd = TRUE, log = "",        axes = TRUE, axisnames = TRUE,        cex.axis = par("cex.axis"), cex.names = par("cex.axis"),        inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0,        add = FALSE, ann = !add && par("ann"), args.legend = NULL, ...)
各参数意义:
  • height为进行绘图的数据;

  • width定义bar的宽度;

  • space定义不同bar之间的间隔;

  • names.arg定义每一个bar下方的名称,如果为NULL则默认为数据中的列名;

  • legend.text定义legend中的名称,默认为数据中的行名;

  • beside定义绘图方式,FALSE为堆叠图,TRUE为并列图;

  • horiz定义绘图方式,FALSE为纵向绘图,TRUE为横向绘图;

  • density为底纹的密度;

  • angle为底纹的倾斜角度;

  • col为定义条形填充颜色;

  • border定义条形边框颜色,NA为去除边框;

  • main和sub定义标题和副标题;

  • xlab和ylab定义x和y轴的名称;

  • xlim和ylim定义x和y轴的界限;

  • xpd定义是否允许bar超过图像的范围;

  • log定义数据是否需要log转换;

  • axes定义是否需要显示垂直的或水平的轴;

  • axisnames是否显示轴的名字;

  • cex.axis和cex.names定义轴标签和bar表现的大小;

  • inside当space为0时,相邻bar之间是否用线间隔;

  • plot是否绘图;

  • axis.lty定义轴的线型;

  • add定义bar是否是添加进一个已有的图像中;

  • args.legend应用list函数通过legend命令的参数调整图例。

我们可以尝试着使用这些参数对柱状图进行修改,首先,我们创建一个矩阵示例数据:
#创建一个示例数据#分组名称Category = c("sampleA""sampleB""sampleC""sampleD""sampleE")#样本数据(样本数据为矩阵,绘制堆叠柱状图)Value = matrix(sample(20:80,15),nrow=3)

查看一下:

简单的画一个堆叠柱状图:

barplot(data$Value,names.arg = data$Category,xlab = "value",ylab = "name",main="bar")

现在的柱状图只有黑白灰三种颜色,可以通过col参数定义不同分组的颜色,并通过图例进行说明:

barplot(Value,names.arg = Category,xlab = "sample",ylab = "value",main="bar",        col=c("lightgreen","lightblue","orange"))#绘制图例legend("topright",legend = c("Group 1", "Group 2" , "Group 3"),       fill = c("lightgreen","lightblue","orange"),cex=0.5)

但是现在不是很美观,我们可以调节一下柱子的间距和图例的位置,不让他遮挡图形:

#space调节柱子间距barplot(Value,names.arg = Category,xlab = "sample",ylab = "value",main="bar",        col=c("lightgreen","lightblue","orange"),space=1)#top指定图例位置legend("top",legend = c("Group 1", "Group 2" , "Group 3"),fill = c("lightgreen","lightblue","orange"),cex=0.5)


使用barplot()函数绘制精美堆叠图

以上我们通过一些尝试基本熟悉了barplot()函数的使用,接下来我们给大家提供一个晋级版的脚本,用于绘制一个较为美观的堆叠图:
#读入数据,处理数据,把数据整理成barplot要求的输入数据matrixrequire("RColorBrewer")
#读取数据x<-read.table("new_tax_abundance.txt",sep="\t",header = TRUE,check.names=FALSE,comment.char="")
#获得颜色,多个色板组合成一个33个颜色的向量mycol<-c(brewer.pal(9, "Set1"),brewer.pal(12, "Paired"),brewer.pal(12, "Set3"))#按第二列拍一下序,x<-x[order(x[,2],decreasing =T),]#删除第一列结果保存到a中a<-x[,2:ncol(x)]
#修改a变量中的行名rownames(a)<-x[,1]#将a变量数据框转换成矩阵,因为barplot只能输入矩阵数据t<-as.matrix(a)



#########################################绘图开始,简单barplot的绘图不能达到我们要的结果,legend和坐标轴需要调整。##########################################dev.off()barplot(t,col=mycol[1:nrow(t)],ylab="Relative abundance ")legend("topright",rownames(t),fill=mycol[1:nrow(t)])
#####################################修改参数,调整图片,美化图片######################################dev.off() #关闭绘图设备,初始化par
par(mar=c(18, 5, 4, 1.1))p<-barplot(t,main="abundance",xaxs="i", ylim=c(0,1),axisnames=F,border = NA , space=0,col=mycol[1:nrow(t)],ylab="Relative abundance ")#axis函数用于绘制坐标轴axis(side=1,p,labels=F)#text函数用于在图中添加文字text(x=p-0.25, y=-0.04, labels=colnames(t),cex=1, xpd=TRUE, srt=45,adj=1)box(bty="l")legend("bottom",ncol=3,xpd=T,bty = "n", legend=rownames(t),fill=mycol[1:nrow(t)], border = NA, inset=c(0,-0.85),cex=1)
示例数据,各样本中具有代表性的微生物丰度组成(部分):
#OTU ID  2my101  2my102  2my201  2my202  2my301  2my302  2w101  2w1020319-7L14  0  5.55E-05  6.40E-05  5.86E-05  0  9.79E-05  0.000112328  0Acidimicrobiia  0.045025218  0.038095767  0.043830477  0.036355467  0.056052325  0.056198468  0.023195732  0.028347517Acidobacteriia  0.010197157  0.009695086  0.010914983  0.014143664  0.00958218  0.011034179  0.023139568  0.020326945Actinobacteria  0.003979826  0.002904825  0.003986527  0.002344254  0.004482356  0.002642331  0.01067116  0.006796057Alphaproteobacteria  0.102063274  0.111882031  0.11876439  0.110199457  0.181169529  0.108800431  0.160853693  0.148411192Anaerolineae  0.04350298  0.027475577  0.034322504  0.027447303  0.026688316  0.035157684  0.030103903  0.033306802Bacteroidia  0.003888125  0.014413114  0.010403343  0.013889703  0.027900382  0.009615149  0.007469812  0.004714382Blastocatellia_(Subgroup_4)  0.128069693  0.113325192  0.144772747  0.1216863  0.07919592  0.112617131  0.147486661  0.135186432Chloroflexia  0.002200825  0.001313647  0.002622154  0.000586063  0.002904384  0.002006214  0.0042123  0.002571481Dehalococcoidia  0.008821641  0.011730314  0.009827748  0.010568677  0.008072815  0.013529714  0.004942432  0.005755219Deltaproteobacteria  0.076148556  0.096599319  0.081308092  0.105393737  0.067464038  0.089252073  0.075877562  0.070593277Gammaproteobacteria  0.090215497  0.103204559  0.108062591  0.110004102  0.128661925  0.088126636  0.11305813  0.094899896Gemmatimonadetes  0.059000459  0.063277087  0.051718257  0.053429448  0.051775791  0.055024099  0.030721707  0.036000735Gitt-GS-136  0.03565337  0.033562759  0.037371024  0.037488523  0.03069042  0.038778656  0.018927268  0.029143452Holophagae  0.012948189  0.021462404  0.01272704  0.020746645  0.015985547  0.014312627  0.020387532  0.02026572JG30-KF-CM66  0.008051353  0.006956779  0.00763196  0.006661587  0.010382601  0.009174761  0.003032856  0.00287761KD4-96  0.064667584  0.042573268  0.047561184  0.040790013  0.042536648  0.061311868  0.065711879  0.082899651MB-A2-108  0.015479138  0.012026347  0.011277394  0.013792026  0.005785899  0.019059037  0.01853412  0.024612747NC10  0.06954608  0.051417259  0.054319093  0.05788353  0.022297436  0.052381768  0.059084527  0.069246311
绘图结果:

参考资料:

视频课程:https://bdtcd.xetslk.com/s/2G8tHr



更多生物信息分析课程

生信课堂
生信笔记
 最新文章