在R中创建热图一直是许多帖子,讨论和迭代的主题。我的主要问题是,将点阵levelplot()
或基本图形image()
中的解决方案的视觉灵活性与基本的heatmap()
,图表的pheatmap()
或gplots的heatmap.2()
的轻松集群相结合是非常棘手的。这是我想改变的一个小细节 - x轴标签的对角线方向。让我在代码中向你展示我的观点。热图中x轴上的对角标签方向
#example data
d <- matrix(rnorm(25), 5, 5)
colnames(d) = paste("bip", 1:5, sep = "")
rownames(d) = paste("blob", 1:5, sep = "")
您可以改变方向与levelplot()
容易对角线:
require(lattice)
levelplot(d, scale=list(x=list(rot=45)))
但应用该聚类似乎疼痛。其他视觉选项如在热图单元周围添加边框也是如此。现在
,转移到实际heatmap()
相关的功能,集群和所有的基本视觉效果是超级简单 - 几乎无需进行调整:
heatmap(d)
,因此在这里:
require(gplots)
heatmap.2(d, key=F)
最后,我最喜欢的一个:
require(pheatmap)
pheatmap(d)
但所有这些都没有选择旋转标签。 pheatmap
手册建议我可以使用grid.text
来定制我的标签。这是多么的快乐 - 特别是在聚类和改变显示标签的顺序时。除非我在这里失去了一些东西...
最后,有一个老好image()
。我可以旋转标签,通常它是最可定制的解决方案,但没有集群选项。
image(1:nrow(d),1:ncol(d), d, axes=F, ylab="", xlab="")
text(1:ncol(d), 0, srt = 45, labels = rownames(d), xpd = TRUE)
axis(1, label=F)
axis(2, 1:nrow(d), colnames(d), las=1)
所以,我应该怎么做才能让我的理想,快速的热图,聚类和方向,并很好的视觉特征黑客?我的最佳出价在某种程度上改变了heatmap()
或pheatmap()
,因为这两者似乎是最全面的调整。但任何解决方案欢迎。
基本图形不允许你控制滴答标签的旋转到任意角度---因此你必须使用你在最后一个“图像”例子中显示的“text”“hack”。我可能会将'xaxt = FALSE'传递给我的'heatmap'调用,然后添加没有标签的轴,然后使用'text'添加标签,就像使用'image'一样。 – 2013-03-19 16:56:56
@GavinSimpson这种方法的问题在于,当您正在群集时,您必须手动定义x轴上标签的顺序。可能,但有点痛苦。不过,感谢您指出'heatmap()'是使用基本图形而不是网格(我认为它是像'pheatmap()'的网格)。 – 2013-03-19 17:09:50
有一个解决方案 - 我有一些工作,我只是写作答案。这比我想象的要多一点。即将推出的解决方案... – 2013-03-19 17:12:01