在'par(mfrow =')无法实现的布局中排列绘图

时间:2011-03-09 09:54:49

标签: r graphics

我有三个情节,我会安排在一个窗口中。我可以使用par(mfrow = c(2, 2))

在常规的2 * 2网格上排列类似大小的图
par(mfrow = c(2, 2))
plot(1:10, main = "plot1")
plot(10:1, main = "plot2")
plot(rnorm(10), main = "plot3")

但是,我想在顶行上将“plot1”和“plot2”放在彼此旁边,并在它们下面的“plot3”中水平居中。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:17)

不完全是你要求的,因为第三个数字不是水平居中,而是延伸到整个设备宽度,但layout功能允许更灵活的配置。

例如,以下布局定义:

R> layout(matrix(c(1,2,3,3), 2, 2, byrow = TRUE))
R> plot(rnorm(100),col=1)
R> plot(rnorm(100),col=2)
R> plot(rnorm(100),col=3)

给出以下结果:

layout with horizontal third figure

您还可以使用具有以下布局的“垂直”拉伸:

R> layout(matrix(c(1,3,2,3), 2, 2, byrow = TRUE))
R> plot(rnorm(100),col=1)
R> plot(rnorm(100),col=2)
R> plot(rnorm(100),col=3)

给出了:

layout with a vetrtical third figure

另一种解决方法是将您的身材保存为PDF格式,然后使用像inscape这样的工具进行编辑,以便将您的第三个数字“居中”。

答案 1 :(得分:14)

您可能想要layout,您可以通过创建矩阵来设置非常复杂的网格。

m <- matrix(c(1, 0, 1,  3, 2, 3, 2, 0), nrow = 2, ncol = 4)
##set up the plot
layout(m)
## now put out the 3 plots to each layout "panel"
plot(1:10, main = "plot1")
plot(10:1, main = "plot2")
plot(rnorm(10), main = "plot3")

使用layout.show查看每个面板。

打印出矩阵以了解其工作原理:

 m
      [,1] [,2] [,3] [,4]
 [1,]    1    1    2    2
 [2,]    0    3    3    0

第一个面板有1个,第二个面板有2个,“非面板”有0个。

请参阅help(layout)