我正在使用R使用heatmap.2从矩阵创建热图 - 我想将这些图像分组为一个大图像 - 我通常用来实现这一点的是布局() - 但这不起作用,因为热图.2使用布局,显然布局不能递归地工作.
有没有人对如何在没有布局的情况下将2个图像组合在一起,或者如何使布局支持递归调用有任何建议?
mat = matrix(nrow=3,nrow=3,1:9)
layout(matrix(nrow=2,ncol=1))
heatmap.2(mat) ## overrides the layout and produces only one plot that takes whole screen
heatmap.2(mat) ## still only one image
Run Code Online (Sandbox Code Playgroud)
谢谢.
接下来是一个几乎肯定不是完美解决方案的黑客攻击,但它可能会让你开始.
创建自己的heatmap.2函数版本hm3.在代码中hm3,注释掉以下所有行:
if (missing(lhei) || is.null(lhei))
Run Code Online (Sandbox Code Playgroud)
和layout电话:
layout(lmat, widths = lwid, heights = lhei, respect = FALSE)
Run Code Online (Sandbox Code Playgroud)
这是一大堆代码,可能是30行.现在,下面的代码生成两个带有树状图和键并排的热图:
x <- as.matrix(mtcars)
lhei <- c(1.5, 4,1.5,4)
lwid <- c(1.5, 4,1.5,4)
layout(rbind(c(4,3,8,7),c(2,1,6,5)),
widths = lwid, heights = lhei, respect = FALSE)
hm3(x)
hm3(x)
Run Code Online (Sandbox Code Playgroud)

显然,这将需要相当大的调整,使它看起来不错(和一个更大的绘图区域;我已经把所有东西压成合理的尺寸,在这里张贴).
这完全没有经过测试.使用hm3控制绘图外观的函数中的任何选项都可能会导致事情略微变得混乱.但这可能是您自己尝试解决这些问题的良好起点.