32

我现在读了几次 heatmap.2 帮助手册,而且在各种在线教程中我也没有读到关于将颜色键移动到不同位置的方法。现在,我想知道这是否可能?

如果您使用 gplots 包中的 heatmap.2 函数,颜色键默认位于左上角。

4

2 回答 2

76

图中每个元素的位置heatmap.2可以使用lmatlheilwid参数来控制。这些通过以下方式传递heatmap.2layout命令:

layout(mat = lmat, widths = lwid, heights = lhei)

lmat是一个描述屏幕如何被分解的矩阵。默认情况下,heatmap.2 将屏幕划分为一个四元素网格,因此lmat也是一个 2x2 矩阵。矩阵的每个元素中的数字描述了绘制接下来四个图的顺序。 Heatmap.2 按以下顺序绘制其元素:

  1. 热图,
  2. 行树状图,
  3. 列树状图,
  4. 钥匙

所以默认lmat是:

> rbind(4:3,2:1)
     [,1] [,2]
[1,]    4    3
[2,]    2    1

例如,如果您想将键放在您指定的热图下方:

> lmat = rbind(c(0,3),c(2,1),c(0,4))
> lmat
     [,1] [,2]
[1,]    0    3
[2,]    2    1
[3,]    0    4

lwid并且lhei是指定每行和每列的高度和宽度的向量。默认c(1.5,4)为两者。如果您更改lmat,您将不得不或可能想要更改这些。对于上面的例子,如果我们想保持所有其他元素的大小相同,但希望底部有一个细的颜色键,我们可以设置

>lwid = c(1.5,4)
>lhei = c(1.5,4,1)

然后我们准备绘制热图:

>heatmap.2(x,...,lmat = lmat, lwid = lwid, lhei = lhei)

这将绘制一个热图,其中列树状图位于热图上方,行树状图位于左侧,键位于下方。不幸的是,密钥的标题和标签是硬编码的。

?layout有关如何layout工作的更多详细信息,请参阅。

于 2013-03-12T14:56:48.647 回答
1

在相当长的代码中,par 调用定义了指定的区域heatmap.2,我没有看到它的原始作者或围绕这些部分的任何“修订者”,尽管他们有时会在 R-help 上访问。主要绘图尺寸由 2 元素向量 设置margins。以下是您可能需要进行更改的一些地方:

#1) 
if (!missing(RowSideColors)) {
    par(mar = c(margins[1], 0, 0, 0.5))
    image(rbind(1:nr), col = RowSideColors[rowInd], axes = FALSE)

#2)
if (!missing(ColSideColors)) {
    par(mar = c(0.5, 0, 0, margins[2]))
    image(cbind(1:nc), col = ColSideColors[colInd], axes = FALSE)

#3)
par(mar = c(margins[1], 0, 0, margins[2]))

#4)
par(mar = c(margins[1], 0, 0, 0))

#5)
par(mar = c(0, 0, if (!is.null(main)) 5 else 0, margins[2]))

#6
if (key) {
    par(mar = c(5, 4, 2, 1), cex = 0.75)
于 2013-03-12T01:41:25.293 回答