查看: 10439|回复: 29

[R语言] 介绍一种个性化热图的绘制方法

  [复制链接]

管理员

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

主题
153
注册时间
2019.7.8
在线时间
243 小时

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

(genes,2019)

绘制这样的热图,有两个关键的步骤:颜色条的控制和分组信息的添加。接下来,就为大家介绍如何使用R语言的pheatmap包绘制这样的图表。

#安装pheatmap包;
#install.packages("pheatmap")

#加载R包;
library(pheatmap)

#查看当前目录的文件;
dir()数据准备

这里用到的范例数据为基迪奥结题报告中GO富集分析的结果,范例数据可以在以下链接中下载:https://www.omicshare.com/forum/thread-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在线课堂观看系列课程。



视频观看方式

电脑端:登录Omicshare课堂www.omicshare.com/class观看学习
手机端:通过点击基迪奥微信公众号底部菜单栏【视频教程】观看学习

今天的内容就到这里啦~

参考文献
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.



本文作者:基迪奥-莫北

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
新的一天加油!
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2020.3.16
在线时间
5 小时

发表于 2020.3.19 11:16:34 | 显示全部楼层
⭐谢谢~~
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2018.12.1
在线时间
4 小时

发表于 2020.3.19 14:02:39 | 显示全部楼层
谢谢分享。标记一下,以后认真的学习学习!
回复 支持 反对

使用道具 举报

草履虫

Rank: 2

主题
0
注册时间
2016.11.3
在线时间
3 小时

发表于 2020.3.20 11:05:00 | 显示全部楼层
谢谢分享。标记一下
回复 支持 反对

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
2
注册时间
2019.2.3
在线时间
30 小时

发表于 2020.3.23 08:57:06 | 显示全部楼层
回复

使用道具 举报

中华鲟

Rank: 5Rank: 5

主题
0
注册时间
2020.1.16
在线时间
19 小时

发表于 2020.3.27 08:43:45 | 显示全部楼层
学习
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2018.7.5
在线时间
11 小时

发表于 2020.3.30 15:04:59 | 显示全部楼层
谢谢分享
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
1
注册时间
2020.3.30
在线时间
1 小时

发表于 2020.3.30 17:29:48 | 显示全部楼层
正在写论文的我,太感谢了,正愁怎么制作热图
回复 支持 反对

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
3
注册时间
2020.3.4
在线时间
5 小时

发表于 2020.3.31 08:49:56 | 显示全部楼层
不知道为什么,一看到这种程序就觉得好难。
回复 支持 反对

使用道具 举报

中华鲟

Rank: 5Rank: 5

主题
0
注册时间
2020.1.16
在线时间
19 小时

发表于 2020.3.31 14:44:41 | 显示全部楼层
学习
回复

使用道具 举报

中华鲟

Rank: 5Rank: 5

主题
0
注册时间
2020.1.16
在线时间
19 小时

发表于 2020.4.1 08:30:33 | 显示全部楼层
周四
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
2
注册时间
2019.11.27
在线时间
5 小时

发表于 2020.4.2 10:42:32 | 显示全部楼层
学到啦,谢谢
回复 支持 反对

使用道具 举报

禁止发言

主题
32
注册时间
2017.11.22
在线时间
20 小时

灌水之王


发表于 2020.4.2 15:00:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2018.9.27
在线时间
8 小时

发表于 2020.4.5 21:22:29 | 显示全部楼层
多谢老师的分享
回复 支持 反对

使用道具 举报

中华鲟

Rank: 5Rank: 5

主题
0
注册时间
2020.1.16
在线时间
19 小时

发表于 2020.4.6 09:06:59 | 显示全部楼层
周四
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2018.9.27
在线时间
8 小时

发表于 2020.4.6 10:09:39 | 显示全部楼层
有用
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2018.8.16
在线时间
8 小时

发表于 2020.4.7 11:52:12 | 显示全部楼层
很有用,哇 感谢分享呀
回复 支持 反对

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2017.1.13
在线时间
16 小时

发表于 2020.4.7 15:55:01 | 显示全部楼层
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
12
注册时间
2020.4.7
在线时间
9 小时

发表于 2020.4.7 21:31:33 来自手机 | 显示全部楼层
R语言
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
12
注册时间
2020.4.7
在线时间
9 小时

发表于 2020.4.7 21:32:45 | 显示全部楼层
R语言
好棒好棒好棒我喜欢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表