2017-02-15 180 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 
相关问题