pheatmap我其实用的次数不多,但在帮别人解决一些问题之后,比如:

我发现这包的交互能力是比较差的,它就像传统的plot函数一样,命令一打下去,就直接画图,虽然它其实是有输出的,但事实上超出了一般用户的理解能力,它的输出,比如说可以用cowplot来拼图,我在上面链接的那篇文章中皆来演示,然而很多人问我,怎么把pheatmap画的热图和ggplot2的图,用cowplot来拼。这就是因为拼图的方法超出了很多的理解范围,看过演示,也只能照猫画老虎,过后也就忘记了。有没有办法用大家可以理解的方法来拼?这样就不太容易忘记,答案是肯定的,我下次再讲。今天先讲一讲其前提条件。

pheatmap上一版本是2015年发布的,2018年5月发布了一个新版本:

Version 1.0.10

  • Fixed the blank page issue for RMarkdown notebooks and printing heatmaps to pdf without using filename parameter
  • Can set color of NA now
  • Output now is a pheatmap object with same slots as previously, but it has also print and grid.draw functions (thanks Guangchuang Yu)

主要是由我贡献的,我给pheatmap的输出加了个类属性,这样在画图上,可以好比ggplot2一样。这其实是我写《扪心自问,meme几何?》时,思考的结果。

比如:

library(pheatmap)
d = matrix(rnorm(100), ncol=10)
## 如果不加silent=T,会有画图窗口出来,但结果一样。
p = pheatmap(d, silent=T) 

这样p就存了一个pheatmap对象,这个对象,你在R命令行上打p回车,图就画出来,好像ggplot2一般的体验,这是因为我相应地写的print方法。

然后我还写grid.draw的方法,这样子你就可以使用ggsave来保存p为图文件,比如:

ggsave(p, filename="pretty_heatmap.pdf")

这样子就不是一条命令出图,而是出对象,对象在需要的时候出图,而且方便我们输出文件,交互性就更强了,体验上升了很多。

这个类属性,还不止这些好处,有了类属性,我们可以写其它方法,这也是文章开头说的,实现一种大家都很容易理解的方式来允许cowplotpheatmap的基础,先卖个关子,敬请期待。