[英]How to set axis label size in gplots heatmap.2?
我找不到为热图本身设置轴标签大小的方法。 传递给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')
检查heatmap.2
代码是不可能的设计。 heatmap.2
调用image
来绘制热图,并将额外的关键字args( ...
)传递给它,因此调用heatmap.2(..., cex.lab = n, ...)
会成功,并且image
考虑par
,所以也这样,它可能是可能的。 但是这里xlab
和ylab
被替换为空字符串,并且以后绘制了ticklabels和axis标签:
# 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重叠,但maye应该将另一个参数添加到函数中,因此用户可以修改它是否适合。
您可以将heatmap.2.R
从gplots
源复制到您的工作目录,修改它并获取它:
source('heatmap.2.R')
但是,您还需要将这些行添加到开头:
require(gtools)
plot.dendrogram = stats:::plot.dendrogram
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.