在我们的一篇客户文章的GO/KEGG富集分析部分有这样一类热图(如下),通过改变颜色条的映射方式,以0.05为分界,非常巧妙地实现对Q值(也可以是P值)的可视化展示,直观展示出感兴趣通路在不同比较组的富集情况。


R语言温度图 r语言如何绘制热图_改变颜色

genes,2019


绘制这样的热图,有两个关键的步骤:颜色条的控制和分组信息的添加

接下来,就为大家介绍如何使用R语言的pheatmap包绘制这样的图表。


#安装pheatmap包;
#install.packages("pheatmap")
 
#加载R包;
library(pheatmap)
 
#查看当前目录的文件;
dir()


数据准备

这里用到的范例数据为基迪奥结题报告中GO富集分析的结果,范例数据可以在以下链接中

下载: https://www. omicshare.com/forum/thr ead-5965-1-1.html

数据的格式如下:


R语言温度图 r语言如何绘制热图_数据_02


#读入数据;
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


R语言温度图 r语言如何绘制热图_图例_03


#显示数据;
#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


R语言温度图 r语言如何绘制热图_r语言 col_04


#调整热图的颜色条的刻度和标签;
 
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


R语言温度图 r语言如何绘制热图_r语言 col_05


颜色调整

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


R语言温度图 r语言如何绘制热图_数据_06


添加分组信息

这里主要用到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


R语言温度图 r语言如何绘制热图_r语言 col_07


图例大小调整

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


R语言温度图 r语言如何绘制热图_数据_08


最后,如果不喜欢分组信息的的标记颜色,可以通过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.