簡體   English   中英

如何在heatmap.2(圖)中個性化行的順序?

[英]How can I individualize the order of rows in heatmap.2 (gplots)?

我很感興趣,我的可視化結果變量的使用分配heatmap.2 ,在所提供的gplots包。

這是我的數據集的樣子:

> head(data.w)
year Armenia Azerbaijan Bulgaria Croatia Cyprus Czech Republic Estonia Georgia 
1998       0          0     1.14       0   1.21           1.32    1.43       0    
1999       0          0     1.32       0   1.44           1.50    1.68       0  
2000       0          0     1.32       0   1.63           1.59    1.75       0  
2001       0.75       0     1.46       0   1.85           1.93    1.81       0  
2002       0.82       0     1.74       0   2.04           2.00    2.00       0.34  
2003       0.87       0     1.85       0   2.22           2.22    2.19       0.42

要繪制熱圖 ,我使用以下代碼

library(gplots) 
library(grDevices)

min(data.w[,2:9]) 
max(data.w[,2:9]) 
data.wx <-as.matrix(data.w)

pdf("heatmap.pdf", width=10,height=5)
heatmap.2(as.matrix(t(data.w[,2:9])), trace="none", 
          Rowv=NULL, Colv=NULL, dendrogram="none",
          labCol=data.w$year,labRow=data.w$cname,
          lhei=c(0.1,1), lwid=c(0.1,1), margins=c(5,10),
          colsep=1:16, rowsep=1:9, sepcolor="white",
          col=gray.colors(8, start=1, end=0) ) 
dev.off()

總的來說,我對劇情看起來很滿意:

在此處輸入圖片說明

但是,顯示的國家實際上屬於兩個不同的組 ,亞美尼亞,阿塞拜疆和格魯吉亞屬於“鄰里”組,其余國家屬於“擴大”組。

簡而言之, 我想按小組成員划分熱圖。 在每個組中,不應按字母順序或按值列出國家,但我需要根據一些特定標准對順序進行個性化設置。

重要的是,我不想

  • 繪制兩個單獨的圖,因為這會改變顏色的分布;
  • 通過使用RowSideColors作為附加參數對行變量進行RowSideColors ,例如此處建議的,以便對輸入變量進行分類。

相反,最終的熱圖應該組織如下: 在此處輸入圖片說明

為了得到這樣的heatmap.2(行順序是個性化的),我需要在圖上添加什么? 請注意,在分隔組的行之間不需要多余的空間。

太感謝了!

盡管不理想,但在上述情況下,我認為您可以通過刪除Rowv=NULL,來做到這一點Rowv=NULL,但保持Colv=NULL, dendrogram="none",可以對行進行排序Rowv=NULL,Colv=NULL, dendrogram="none",繪制樹狀圖。

僅將數據放在頭部,就可以通過以下代碼獲得此熱圖

data.w = t(matrix(c(1998,       0,          0,     1.14,       0,   1.21,           1.32,    1.43,       0,    1999,       0,          0,     1.32,       0,   1.44,           1.50,    1.68,       0,  2000,       0,          0,     1.32,       0,   1.63,           1.59,    1.75,       0,  2001,       0,          0,     1.46,       0,   1.85,           1.93,    1.81,       0,  2002,       0,          0,     1.74,       0,   2.04,           2.00,    2.00,       0, 2003,       0,          0,     1.85,       0,   2.22,           2.22,    2.19,       0),9,6))
colnames(data.w) = c("year", "Armenia", "Azerbaijan", "Bulgaria", "Croatia", "Cyprus", "Czech Republic", "Estonia", "Georgia")
group = c(0,0,1,1,1,1,1,1,0)
library(gplots) 

heatmap.2(as.matrix(t(data.w[,2:9])), trace="none", 
      # Rowv=NULL, Colv=NULL, 
      dendrogram="none",
      # reorderfun = group,
      labCol=data.w[,1],#labRow=data.w$cname,
      lhei=c(0.1,1), lwid=c(0.1,1), margins=c(5,10),
      colsep=1:16, rowsep=1:9, sepcolor="white",
      col=gray.colors(8, start=1, end=0) ) 

在剩下的年份中添加時,克羅地亞將與其他三個分開。

否則應該可以使用reorderfun選項來實現,但是我不知道它是如何工作的。

塞巴斯蒂安·拉施卡(Sebastian Raschka)[ http://sebastianraschka.com]非常友善,並幫助我解決了我很高興分享的問題。

如果要避免按字母順序對行(此處為國家名稱)進行排序,則應編寫一個函數,以根據需要對DataFrame中的國家進行排序。 為了簡單起見並堅持使用該示例,您還可以在少數國家/地區快速手動進行操作:

data.w <- data.w[c("Cyprus","Czech Republic","Estonia","Bulgaria","Croatia","Armenia","Azerbaijan","Georgia")]

然后,我們用一個占位符函數覆蓋heatmap.2函數reorderfun ,但是該函數不會“做任何事情”,因此我們保持DataFrame的順序。

總的來說,這就是代碼的外觀,以便產生如上所示的熱圖(第二張圖片)。

heatmap.2(as.matrix(t(data.w)), trace="none",
          Rowv=NULL, Colv=NULL, dendrogram="none",
          reorderfun=function(d,w) { d },
          labCol=data.w$year,labRow=data.w$cname,
          lhei=c(0.1,3), lwid=c(0.1,3), margins=c(5,8),
          colsep=1:16, rowsep=1:22, sepcolor="white",
          col=gray.colors(8, start=1, end=0)
          )

非常感謝塞巴斯蒂安!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM