[英]How can I saturate the color in gplots heatmap.2 by defining a range (e.g. -2 to 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.