热图:我要鲜明又直观的对比

作者: 小洁忘了怎么分身 | 来源:发表于2020-12-04 12:48 被阅读0次

0.需求

如果直接拿基因的log表达量去画热图,画风是这样的:

(示例矩阵没有行名和列名,有行名列名的矩阵可用show_rownames = F,show_colnames = F参数隐藏行列名)

rm(list = ls())
library(pheatmap)
load("exp.Rdata")
exp[1:4,1:4]
##          [,1]     [,2]     [,3]     [,4]
## [1,]  4.54610  4.40210  4.49239 10.25060
## [2,] 11.25310 11.20760 11.17820  6.98791
## [3,]  5.81479  5.91209  6.11324 11.54910
## [4,] 11.64830 11.63730 11.59630  7.90508
pheatmap(exp)

可以看到,两组之间能看出差别,但是对比不鲜明。这个矩阵一行是一个基因在6个样本里的表达量,一列是一个样本里所有基因的表达量。我们如果可以强调列与列之间的差别,图就会更加直观了,实现这一目的的办法是将数据按行标准化,用到scale,它既是一个函数,又是pheatmap的一个参数。

1.强调列与列之间的差别

有两个方法:一个是内部标准化,画图时使用pheatmap自带的scale参数:

pheatmap(exp,scale = "row")

一个是外部标准化,先scale再画图。

n = t(scale(t(exp)))
pheatmap(n)

这个例子 样本数量较少,两张图一毛一样。我们来换个样本量多的数据。

2.换个样本多的数据来试试

这是tinyarray包里的内置数据,装了包就可以直接用哦

if(!require(tinyarray)) devtools::install_github("xjsun1221/tinyarray")
library(tinyarray)
exp2 = log2(exp_hub1+1)
pheatmap(exp2,show_colnames = F,scale = "row")
pheatmap(t(scale(t(exp2))),show_colnames = F)

这次,两张图看出区别了吧?

聚类情况是一致的,但是颜色分配不同哦,由于取了标准化以后还是有个别比较大/小的值,所以第一张图大片的颜色是比较淡的;第二张图大片的颜色是红色和黄色,边上挤着一点点蓝色。

配色不同,是因为breaks的计算模式不同,如果自己设置相同的breaks,两张图就一毛一样了哦

拼起来的图更直观~

自定义breaks设置了颜色分配范围,超出范围的格子将会以最大/小值颜色表示(我设置的是-3到3范围内从蓝到红的渐变,那么大于三的值会是最红的颜色,小于三的值则是最蓝的颜色)

当然 根据实际情况,你也可以设置-2到2的范围,-4到4的范围,可以调试,让他显示出鲜明的对比为止~

library(gridExtra)
p1 = pheatmap(exp2,show_colnames = F,scale = "row",breaks = seq(-3,3,length.out = 100),silent = T)
p2 = pheatmap(t(scale(t(exp2))),show_colnames = F,breaks = seq(-3,3,length.out = 100),silent = T)
grid.arrange(grobs=list(p1$gtable, p2$gtable))

从前遇到这种颜色,都是手动设置一下阈值,现在知道了breaks参数,就齐活啦,两个方法都可以完美的搞起了~

一个不重要的知识点

解释一下为什么上面的代码length.out是100。这是因为热图的默认配色是colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(100),这是100种颜色的渐变,所以breaks需要和这里的100呼应。

so,当你换颜色的时候,比如:

pheatmap(exp2,
         show_colnames = F,
         scale = "row",
         color = colorRampPalette(c("navy", "white", "firebrick3"))(50),
         breaks = seq(-3,3,length.out = 50))

前面是50,后面也要是50,对应起来~

相关文章

  • 热图:我要鲜明又直观的对比

    0.需求[http://222.70.95.243:6893/files/tmp/scale.html#%E9%9...

  • 动起来,身材就算差,也不会比现在更差

    直观对比图 废话不多说,先上最直观的对比图。 2016年前减肥之前的我,在北戴河海边拍的,当时享受着惬意的度假生活...

  • 对比鲜明

    相隔半世纪, 风景也差异。 散养圈养兮, 想必皆天意。 2020.7.10

  • 鲜明的对比

    鲜明的对比 村里有两个人,各自特点很鲜明,对比强烈。 一个是男的,家境殷实,在村里人眼中是一个很能...

  • 这张图,你刷到了吗

    今天,寒潮来袭,但是网络上很热闹,其中一张图引起广大网民热议,这张对比鲜明的图,你刷到了吗? 左边是大连海洋大学一...

  • 2020-04-16 R学习5

    热图 EXCEL文件要转化为TXT格式,才能被R读取热图不但能用颜色直观的展示基因的表达量的高低,并且可以通过层级...

  • 鲜明对比

    医院里,妇科门诊的候诊室门口地面上,大大的印着几个字“男士止步”。然而,却总有一些男士大摇大摆地晃进来,仿佛那几个...

  • 对比好鲜明

    昨天晚上散步,在牌坊街居委会门口遇见一个打游戏的小男孩。 他颓坐在昏暗的墙角,双手抱着手机,全神贯注地在打游戏。他...

  • 玩中学,玩中乐

    我很喜欢这节《海龟之舞》的音乐游戏活动,《海龟之舞》这首音乐节奏对比鲜明,里面的两个形象十分可爱和直观,歌词简单,...

  • 我坚持学习落地健文思维导图第十五天,我是实践落地者刘丽

    1对比分析图全面、直观呈现两个事物的差异,让我们更好做决定。 2对比中心图有两个中心图,对比时要在同一个维度。 3...

网友评论

    本文标题:热图:我要鲜明又直观的对比

    本文链接:https://www.haomeiwen.com/subject/aeobwktx.html