R中的布局内部布局

时间:2011-12-04 10:34:03

标签: r layout

我正在使用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

感谢。

2 个答案:

答案 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)

enter image description here

显然,这需要相当多的调整才能让它看起来不错(以及更大的绘图区域;我已经把所有东西压成合理的尺寸以便在这里发布)。

这完全没有经过测试。很可能使用hm3函数中控制绘图外观的任何选项都会导致事情略微变得混乱。但这可能是您自己尝试解决这些问题的良好起点。

答案 1 :(得分:1)

您打算如何处理结果?

如果您只是想在屏幕上并排比较2个热图,而不是将它们组合成一个单独的图,您可以打开2个绘图设备并将它们并排排列进行比较(比创建单个图表简单得多):

heatmap.2(mat1)
dev.new()
heatmap.2(mat2)

现在用鼠标将一个拖到另一侧。

如果要将组合图形包含在出版物中,则最简单的方法是创建2个图并将它们并排放置在用于创建文章的任何程序中。如果你需要在一个文件中,你仍然可以将2个热图(或其他图)保存为2个文件,然后使用imagemagick,gimp或inkscape等工具将2个文件合并为1并与图形并排。