2014-05-12 128 views
0

我已經使用heatmap.2在R中製作了一個熱圖,我唯一無法弄清楚的是如何控制顏色鍵上刻度線的存在和標記。我下面有一個例子。我想要做的是在顏色鍵的開頭和末尾用勾號標記來表示值的範圍(在本例中爲0-1),而不是標記爲0,0.4和0.8的6個刻度標記。我相信有一個簡單的方法來控制這個,但我似乎無法找到它。heatmap.2和顏色鍵刻度標記

library('gplots') 

data <- c(0, 0.1, 0.1, 0.2, 0.2, 0.7, 0.7, 0.8, 1) 
matr <- matrix(data, 3, 3) 

heatmap.2(matr, trace="none", density.info="none") 

enter image description here

編輯:

我能找到的唯一的解決方法是直接改變heatmap.2本身接受額外的參數,因爲這似乎是硬編碼的(在我的情況下,我想添加一個分和顏色鍵的最大範圍)。

原始heatmap.2

heatmap.2 <-function (...) 
{ 
... 
lv <- pretty(breaks) # line 362 
... 
} 

更改爲:

heatmap.2 <-function (..., xMin = NULL, xMax = NULL, ...) 
{ 
... 
if(is.null(xMin)) lv <- pretty(breaks) 
else lv <- c(xMin, xMax) 
... 
} 
+0

你可能無法張貼圖片,但你一定能發表[大可重複的例子(http://stackoverflow.com/questions/5963269/how-to-make-a-great- R-重複性,例如) – MattLBeck

+0

似乎得到標示實際蜱是從一個用戶/計算機到下一個不同。當我運行上面的代碼,我得到的標籤,正如我提到,在0,0.2,0.6和1,而當亨裏克做到了,他在0,0.4和0.8得到了標籤。也許有關,但我使用R V3.0.3和gplots 2.12.1。 – James

回答

1

的 「key.xtickfun」 的說法是你想要的。將一個函數傳遞給此參數,該函數返回一個名稱列表,其元素將傳遞給「軸」函數。

在功能方面,我得到「休息」從父幀(gplots環境),讓他們漂亮,只保留第一和最後一個破發,這是最小值和最大值。然後,返回帶有「at」和「labels」的列表。 「at」是從中斷處調用的scale01函數返回的值(也來自父框架)。 「標籤」是標籤,應該是自己的標籤。

heatmap.2(matr, trace="none", density.info="none", 
      key.xtickfun = function() { 
      breaks = pretty(parent.frame()$breaks) 
      breaks = breaks[c(1,length(breaks))] 
      list(at = parent.frame()$scale01(breaks), 
       labels = breaks) 
      })