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

Mar*_*rco 8 graphics r

我有三个情节,我会安排在一个窗口.我可以使用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")
Run Code Online (Sandbox Code Playgroud)

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

jub*_*uba 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)
Run Code Online (Sandbox Code Playgroud)

给出以下结果:

布局与水平的第三个数字

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

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)
Run Code Online (Sandbox Code Playgroud)

这使 :

布局与vertrtical第三个数字

另一种解决方法是将您的图形保存为PDF格式,并使用像inscape这样的工具对其进行编辑,以使您的第三个图形"居中".


mds*_*ner 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")
Run Code Online (Sandbox Code Playgroud)

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

打印矩阵以查看其工作原理:

 m
      [,1] [,2] [,3] [,4]
 [1,]    1    1    2    2
 [2,]    0    3    3    0
Run Code Online (Sandbox Code Playgroud)

第一个面板有1个,第二个面板有2个,"非面板"有0个.

help(layout).