又是学习老板扔给我的一堆带有代码的可实现单细胞图文复现资料的一周,本次在学习的过程中再次遇到了基础绘图的高手,下面分享给大家我的快乐,是真的很快乐哈哈哈。
image.png那么,基础绘图你真的会了么?如果不会请看我们之前的公开课:R语言公益课程之基础绘图(https://mp.weixin.qq.com/s/fqPF-1rc-6ftxrnY09inKQ)
首先,奉上文章信息:
标题:A conserved dendritic-cell regulatory program limits antitumour immunity(一个保守的树突细胞调节程序限制抗肿瘤免疫)
DOI(url): 10.1038/s41586-020-2134-y
日期及杂志:Epub 2020 Mar 25,Nature
作者及单位:Miriam Merad,西奈山伊坎医学院(Icahn School of Medicine at Mount Sinai)
关键词:dendritic-cell,antitumour immunity
代码:https://github.com/effiken/Maier_et_al_nature_2020
代码和数据都在GitHub上,可以自行前往下载进行学习。我这里只进行一张图的讲解:
image-20201019233851377.png首先,作者将此图划分成了3行2列的区域,然后在每个区域里使用基础绘图函数进行填充,你没看错,这幅图里面的文字,方框,甚至坐标都是一个一个单独画进来的。其实,这个很考验基本功,特别是基础绘图函数的坐标,有时候很难搞。代码:
# 使用layout函数,每个区域还设置了高度heighs和宽度widths
layout(matrix(1:6,nrow=3,ncol=2),widths=c(10,4),heights=c(.5,10,.5))
image-20201019234329365.png
然后绘制第一列的第一行区域
- 使用了par设置oma,mar图的边距
- image绘制颜色格子,输入数据是一个矩阵,xaxt和yaxt设置不绘制坐标轴
- box对图片绘图区域添加一个方框
- abline添加颜色格子中间的两条红色的线
- mtext添加行注释和列注释
- axis再在颜色格子上方添加坐标刻度
#column 1
# 使用了par设置oma,mar图的边距
par(oma=c(1,5,1.5,.1))
par(mar=c(0,0,0,0))
# image绘制颜色格子,输入数据是一个矩阵,xaxt和yaxt设置不绘制坐标轴
image(as.matrix(as.numeric(cell2annot)),xaxt="n",yaxt="n",col=lin_col)
# box对图片绘图区域添加一个方框
box()
# abline添加颜色格子中间的两条红色的线
abline(v=breaks,col="red")
# mtext添加行注释和列注释
mtext(at=mid_clusts,c("mregDC","DC1","DC2"),cex=.7,line=.25)
mtext("Annotation",font=2,side=2,las=2,line=.25,cex=.6)
# axis再在颜色格子上方添加坐标刻度
axis(side=3,at=mid_clusts,labels=F,tck=-.2)
绘制结果:
image-20201019235341970.png接着,绘制第一列第2行灰色表达矩阵部分,依然使用了image,xart,yaxt,box,abline,metxt这些基础函数。这部分代码中有一个颜色rgb(s,s,s)值得收录一下。
# image绘制表达谱矩阵,使用了rgb设置颜色
image(t(log2(1+as.matrix(mat))),col=rgb(s,s,s),xaxt="n",yaxt="n")
# 矩阵外面添加盒子
box()
# 添加两条红色的直线
abline(v=breaks,col="red")
# 添加行基因名字
mtext(gene_list,side=2,at=seq(0,1,1/(length(gene_list)-1)),las=2,line=.25,font=3,cex=.6)
绘制结果:
image-20201020010942059.png接着,绘制第一列第3行的样本注释条,方框还是使用的image函数,颜色rgb,直线abline,文字mtext
# 通过全局par函数设置图片边距mar
par(mar=c(0,0,0,0))
# 绘制样本注释条颜色矩阵
image(as.matrix(as.numeric(factor(cell2sample,c("Naive","KP")))),col=c(rgb(255,192,203,max=255),rgb(165,75,42,max=255)),xaxt="n",yaxt="n")
# 添加直线
abline(v=breaks,col="red")
# 添加盒子
box()
# 添加样本行注释
mtext("Sample type",font=2,side=2,las=2,line=.25,cex=.6)
绘制结果:
image-20201020011034939.png接着绘制第二列的内容了:相对前面来说使用了新的plot.new(),大于等于4的表示"\u22654",图例legend中的legend的使用。
# 设置绘图边距
par(mar=c(0,0,0,0))
# 第一行绘制空白
plot.new()
# 第2行图片边距
par(mar=c(5,1.5,5,1.5))
# 第二行的矩阵为色度条
image(t(matrix(1:50)),col=rgb(s,s,s),xaxt="n",yaxt="n")
# 添加盒子
box()
# 添加注释条的文字
mtext(c("0","\u22654"),at=c(0,1),las=2,side=4,cex=.7,line=.25)
mtext("Log2\n1+#UMI per 2000",side=3,line=.5,cex=.4)
# 第三行内容,为样本legend
par(mar=c(0,0,0,0))
plot.new()
legend(x = 0,y=2,legend = c("Naive","KP"),fill = c(rgb(255,192,203,max=255),rgb(165,75,42,max=255)),bty="n",cex=.8,xpd=NA)
绘制结果:
image-20201020011650969.png
网友评论