我找不到一种方法来设置热图本身的轴标签大小。传递给heatmap.2的cex.lab参数无效。调用par(cex.lab = 2.5)会对图例轴标签和标题产生影响(所有这些加在一起,我无法想象如果只想更改标题……)。无论如何,我的问题是关于热图轴标签的大小。示例代码:
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')发布于 2017-02-15 23:31:03
检查heatmap.2代码在设计上是不可能的。heatmap.2调用image来绘制热图,并将额外的关键字args (...)传递给它,因此调用heatmap.2(..., cex.lab = n, ...)就可以了,而image考虑使用par,因此也可以这样做。但在这里,xlab和ylab被替换为空字符串,并且稍后将绘制ticklabel和轴标签:
# 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,这避免了在合理的范围内与ticklabel重叠,但可能应该向函数添加另一个参数,以便用户可以在不适合的情况下进行修改。
您可以将heatmap.2.R从gplots source复制到您的工作目录中,对其进行修改并提供源代码:
source('heatmap.2.R')但是,您还需要将以下几行添加到开头:
require(gtools)
plot.dendrogram = stats:::plot.dendrogramhttps://stackoverflow.com/questions/42251103
复制相似问题