gpt4 book ai didi

r - 如何在 gplots heatmap.2 中设置轴标签大小?

转载 作者:行者123 更新时间:2023-12-01 00:34:22 25 4
gpt4 key购买 nike

我找不到为热图本身设置轴标签大小的方法。 cex.lab参数传递给 heatmap.2没有效果。调用 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绘制热图,并将额外的关键字参数( ... )传递给它,因此调用 heatmap.2(..., cex.lab = n, ...)会成功,而且 image考虑 par ,所以也有可能。但是这里xlabylab被替换为空字符串,并且刻度标签和轴标签都在稍后绘制:

# 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 ,这样可以避免在合理范围内与刻度标签重叠,但是应该在函数中添加另一个参数,以便用户在不合适的情况下进行修改。

您可以复制 heatmap.2.R来自 gplots source进入你的工作目录,修改它并获取它:
source('heatmap.2.R')

但是,您还需要将这些行添加到开头:
require(gtools)
plot.dendrogram = stats:::plot.dendrogram

关于r - 如何在 gplots heatmap.2 中设置轴标签大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42251103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com