在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