我正在使用R使用heatmap.2从矩阵创建热图 - 我希望将这些图像分组为一个大图像 - 我通常用来实现这一点的是布局() - 但这不起作用,因为heatmap.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
感谢。
答案 0 :(得分:6)
以下是一个几乎肯定不是完美解决方案的黑客攻击,但它可能会让你开始。
创建自己的heatmap.2
函数版本hm3
。在hm3
的代码中,注释掉以下所有行:
if (missing(lhei) || is.null(lhei))
和layout
来电:
layout(lmat, widths = lwid, heights = lhei, respect = FALSE)
这是一大堆代码,可能是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)
显然,这需要相当多的调整才能让它看起来不错(以及更大的绘图区域;我已经把所有东西压成合理的尺寸以便在这里发布)。
这完全没有经过测试。很可能使用hm3
函数中控制绘图外观的任何选项都会导致事情略微变得混乱。但这可能是您自己尝试解决这些问题的良好起点。
答案 1 :(得分:1)
您打算如何处理结果?
如果您只是想在屏幕上并排比较2个热图,而不是将它们组合成一个单独的图,您可以打开2个绘图设备并将它们并排排列进行比较(比创建单个图表简单得多):
heatmap.2(mat1)
dev.new()
heatmap.2(mat2)
现在用鼠标将一个拖到另一侧。
如果要将组合图形包含在出版物中,则最简单的方法是创建2个图并将它们并排放置在用于创建文章的任何程序中。如果你需要在一个文件中,你仍然可以将2个热图(或其他图)保存为2个文件,然后使用imagemagick,gimp或inkscape等工具将2个文件合并为1并与图形并排。