2017-02-15 150 views
2

我找不到一種方法來設置熱圖本身的軸標籤大小。傳遞給heatmap.2的參數cex.lab不起作用。調用par(cex.lab = 2.5)對圖例軸標籤和標題有影響(這些都在一起,我無法想象如果只想更改標題...)。無論如何,我的問題是關於熱圖軸標籤大小。示例代碼:如何在gplots heatmap.2中設置軸標籤大小?

require(gplots) 

data(mtcars) 
x <- as.matrix(mtcars) 
heatmap.2(x, ylab = 'foo bar', xlab = 'bar foo') 
par(cex.lab = 5.0) 
heatmap.2(x, ylab = 'foo bar', xlab = 'bar foo') 
+0

'cexRow'和'cexCol'參數可能會有所幫助。你有沒有調查過「熱圖」? – bouncyball

+0

謝謝,'cexCol'和'cexRow'設置軸標籤的大小,而不是軸標籤。與'heatmap'運行結果相同:軸標籤不受影響 – deeenes

回答

2

檢查heatmap.2代碼這是不可能的設計。 heatmap.2調用image來繪製熱圖,並將額外的關鍵字參數(...)傳遞給它,因此調用heatmap.2(..., cex.lab = n, ...)會使之成爲,image認爲par,所以也可以這樣做。但在這裏xlabylab被替換爲空字符串,並且兩個ticklabels和軸標籤後面繪製:

# from gplots heatmap.2 source: 
image(1:nc, 1:nr, x, xlim = 0.5+ c(0, nc), ylim = 0.5+ c(0, nr), 
    axes = FALSE, xlab = '', ylab = '', col=col, breaks=breaks, 
    ...) 

然後繪製它使用mtext軸標籤,這是不以par參數敏感,但接受cex的說法,這裏沒有提供:

# from gplots heatmap.2 source: 
if(!is.null(xlab)) mtext(xlab, side = 1, line = margins[1] - 1.25) 
if(!is.null(ylab)) mtext(ylab, side = 4, line = margins[2] - 1.25) 

這意味着這些標籤都是一樣的大小,而熱圖是巨大的,有時,所以這可能是一個問題。也有人可能會縮小圖形設備,所有其他文本元素有自定義的選項,然後軸標籤的相對大小會更大。但我們如何能夠以更靈活的方式進行分類?我修改這樣的代碼:

# gplots heatmap.2 code modified: 
## add row and column headings (xlab, ylab) 
cex.lab <- ifelse(invalid(match.call()$cex.lab), 1.0, match.call()$cex.lab) 
if(!is.null(xlab)) mtext(xlab, side = 1, 
         line = margins[1] - 1.25 + cex.lab/5, 
         cex = cex.lab) 
if(!is.null(ylab)) mtext(ylab, side = 4, 
         line = margins[2] - 1.25 + cex.lab/5, 
         cex = cex.lab) 

唯一的問題是定位參數現在是cex.lab/5,這避免了與在合理範圍ticklabels重疊,但馬爺另一個參數應該被添加到函數,因此用戶可以修改如果它不適合。

您可以從gplotssource複製heatmap.2.R到您的工作目錄,修改和源是:

source('heatmap.2.R') 

但是你也需要這些行添加到開始:

require(gtools) 
plot.dendrogram = stats:::plot.dendrogram 
相關問題