检查heatmap.2
代码是设计不可能的。heatmap.2
调用image
以绘制热图,并将额外的关键字 args ( ...
) 传递给它,因此调用heatmap.2(..., cex.lab = n, ...)
将使其成功,并image
考虑par
,因此也可以这样。但是这里xlab
andylab
被替换为空字符串,并且刻度标签和轴标签都在稍后绘制:
# 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)
唯一的问题是定位参数 now cex.lab / 5
,这样可以避免在合理范围内与刻度标签重叠,但可能需要在函数中添加另一个参数,如果不适合用户可以修改。
heatmap.2.R
您可以从gplots
源代码复制到您的工作目录,修改它并获取它:
source('heatmap.2.R')
但是,您还需要将这些行添加到开头:
require(gtools)
plot.dendrogram = stats:::plot.dendrogram