【问题标题】:How to set axis label size in gplots heatmap.2?如何在 gplots heatmap.2 中设置轴标签大小?
【发布时间】:2017-02-15 13:44:52
【问题描述】:

我找不到为热图本身设置轴标签大小的方法。传递给 heatmap.2cex.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')

【问题讨论】:

  • cexRowcexCol 参数可能会有所帮助。你调查过?heatmap吗?
  • 谢谢,cexColcexRow 设置轴刻度标签的大小,而不是轴标签。与heatmap 运行相同结果相同:轴标签不受影响

标签: r heatmap gplots


【解决方案1】:

检查heatmap.2 代码设计是不可能的。 heatmap.2 调用 image 来绘制热图,并将额外的关键字 args (...) 传递给它,因此调用 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,这样可以避免在合理范围内与ticklabels重叠,但是可能需要在函数中添加另一个参数,如果不适合用户可以修改。

您可以将heatmap.2.Rgplots source 复制到您的工作目录,修改并获取它:

source('heatmap.2.R')

但是,您还需要将这些行添加到开头:

require(gtools)
plot.dendrogram = stats:::plot.dendrogram

【讨论】:

  • 我添加了您描述的参数以避免重叠 [here.][1] 我实际上添加了三个参数 mgps,其行为类似于 par 函数中的 mgp,默认情况下它采用您引入的值 (一般情况下效果很好)。但后来我需要独立控制标题标签,所以我添加了一个 xmgp 和 ymgp 参数,允许独立控制 x 和 y 标签的 mgps[1]。因此,如果使用,请覆盖此 mgps 值。 [1]:github.com/apascualgarcia/gplots/blob/master/R/heatmap.2.R
猜你喜欢
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
相关资源
最近更新 更多