在我们的一篇客户文章的GO/KEGG富集分析部分有这样一类热图(如下),通过改变颜色条的映射方式,以0.05为分界,非常巧妙地实现对Q值(也可以是P值)的可视化展示,直观展示出感兴趣通路在不同比较组的富集情况。
genes,2019
绘制这样的热图,有两个关键的步骤:颜色条的控制和分组信息的添加。
接下来,就为大家介绍如何使用R语言的pheatmap包绘制这样的图表。
#安装pheatmap包;
#install.packages("pheatmap")
#加载R包;
library(pheatmap)
#查看当前目录的文件;
dir()
数据准备
这里用到的范例数据为基迪奥结题报告中GO富集分析的结果,范例数据可以在以下链接中
下载: https://www. omicshare.com/forum/thr ead-5965-1-1.html
数据的格式如下:
#读入数据;
df<-read.table("qv.go.xls",header = T,sep = "t")
#热图数据准备:提取数据的3~8列;
dt<-df[,3:8]
#分组信息数据框生成;
annotation<-data.frame(Type=as.vector(df[,1]))
#数据框的行名获取;
rowname<-as.vector(df[,2])
#用原表的第二列数据替换两个数据框的行名;
row.names(dt)<-rowname
row.names(annotation)<-rowname
热图绘制
#初始效果尝试,不对数据做聚类和归一化;
p<-pheatmap(dt,cluster_rows=F,cluster_cols=F)
p
#显示数据;
#fontsize_number设置数字大小,number_color设置数据颜色;
#主要对横轴标签的方向,字体的大小做调整;
p1<-pheatmap(dt,cluster_rows=F,cluster_cols=F,
display_numbers=T,number_format="%.3f",
border="white",
fontsize_number=7,
fontsize_col = 8,
fontsize_row = 8,
angle_col = 90)
p1
#调整热图的颜色条的刻度和标签;
p2<-pheatmap(dt,cluster_rows=F,cluster_cols=F,
display_numbers=T,number_format="%.3f",
border="white",
fontsize_number=7,
fontsize_col = 8,
fontsize_row = 8,
angle_col = 90,
legend_breaks=c(0.05,0.25,0.5,0.75,0.95),
legend_labels=c("0.05","0.25","0.5","0.75","0.95"))
p2
颜色调整
colorRampPalette()函数中的bias参数虽然能改变中间颜色的偏移(比如bias>1时,中间颜色向下偏移),如下。但这种方式并不能进行精确对应到0.05的值,只能不断调整数值,去预估位置。
colors = colorRampPalette(c("royalblue", "white","pink","tomato"),bias=3)(100)
当然,还可以用较为“精确”的方式,手工调整不同颜色的数量比例(如这里的5种颜色与≤0.05的Q值对应),让数据与颜色建立映射关系。如果觉得颜色数少,颜色的数量可以翻倍。
mycoldown<-colorRampPalette(c("green","white"))(5)
mycolup<-colorRampPalette(c("white","pink","tomato"))(95)
mycol<-c(mycoldown,mycolup)
p3<-pheatmap(dt,cluster_rows=F,cluster_cols=F,
display_numbers=T,number_format="%.3f",
border="white",
fontsize_number=7,
fontsize_col = 8,
fontsize_row = 8,
angle_col = 90,
legend_breaks=c(0.05,0.25,0.5,0.75,0.95),
legend_labels=c("0.05","0.25","0.5","0.75","0.95"),
color = mycol)
p3
添加分组信息
这里主要用到annotation_row这个参数。
p4<-pheatmap(dt,cluster_rows=F,cluster_cols=F,
display_numbers=T,number_format="%.3f",
border="white",
fontsize_number=7,
fontsize_col = 8,
fontsize_row = 8,
angle_col = 90,
legend_breaks=c(0.05,0.25,0.5,0.75,0.95),
legend_labels=c("0.05","0.25","0.5","0.75","0.95"),
color = mycol,
annotation_row=annotation)
p4
图例大小调整
pheatmap并没有专门的图例大小调整参数,不过可以通过fontsize调整字体的大小,进而调整图例的比例,很神奇的样子!当然你也可以导出矢量图,后期在Ai软件中调整。
p5<-pheatmap(dt,cluster_rows=F,cluster_cols=F,
display_numbers=T,number_format="%.3f",
border="white",
fontsize_number=7,
fontsize_col = 8,
fontsize_row = 8,
angle_col = 90,
legend_breaks=c(0.05,0.25,0.5,0.75,0.95),
legend_labels=c("0.05","0.25","0.5","0.75","0.95"),
color = mycol,
fontsize=6,
annotation_row=annotation)
p5
最后,如果不喜欢分组信息的的标记颜色,可以通过annotation_colors这个参数调整,满意后,使用filename这个参数导出图片即可。
关于R语言还有很多内容值得钻研学习,对R语言感兴趣的老师同学们可以前往我们Omicshare观看~
链接
今天的内容就到这里啦~
参考文献
Ding J, Zhao J, Pan T, et al. Comparative Transcriptome Analysis of Gene Expression Patterns in Tomato Under Dynamic Light Conditions[J]. Genes, 2019, 10(9): 662.