我正在尝试平铺图,特别是在2x3矩阵中,例如:
x <- seq(1, 10, by=.01)
y <- 1/x
prms<-
list(xlab=rep(c("", "x"), each=3),
ylab=rep(c("y", "", ""), 2),
xaxt=rep(c("n", "s"), each=3),
yaxt=rep(c("s", "n", "n"), 2),
mar=list(c(0 , 4.1, 4.1, 0),
c(0 , 0, 4.1, 0),
c(0 , 0, 4.1, 1.1),
c(5.1, 4.1, 0, 0),
c(5.1, 0, 0, 0),
c(5.1, 0, 0, 1.1)))
par(mfrow=c(2, 3))
for (ii in 1:6){
par(mar=prms$mar[[ii]])
plot(x, y, type="l", lwd=2,
xlab=prms$xlab[ii], ylab=prms$lab[ii],
xaxt=prms$xaxt[ii], yaxt=prms$yaxt[ii])
}
Run Code Online (Sandbox Code Playgroud)
哪个产生:
我已经抑制了"内部"边距和轴,因为所有x(相应y)单位都是相同的,因此这些轴将是多余的.然而,正如你所看到的,通过挤压左边和最右边的地块的边缘,我不小心给了中间地块太多的空间(它不是那么明显,但同样的麻烦困扰顶部相对于底部行).
这就是难题.mfrow为每个子图(即轴,边距等)分配相等的空间,而不是每个绘图区域.如何改变我的方法,使每个绘图区域大小相等,其他条件相同(即轴等不变)?我想过使用layout,但想不出一个好的程序化方法来确保一切都具有相同的代表性.
您可以设置mar为 0,并用于oma给出外边距的大小。轴被添加到循环中的相关图中。常见的 x 和 y 轴标签添加了mtext和outer = TRUE
par(mfrow = c(2, 3),
mar = c(0, 0, 0, 0),
oma = c(4, 4, 0.5, 0.5))
for (i in 1:6) {
plot(x, y, type = "l", axes = FALSE)
if (i %in% c(4, 5, 6))
axis(side = 1)
if (i %in% c(1, 4))
axis(side = 2)
box()
}
mtext("x values", side = 1, outer = TRUE, line = 2.5)
mtext("y values", side = 2, outer = TRUE, line = 2.5)
Run Code Online (Sandbox Code Playgroud)
另请参阅当只有一个图具有轴标签时,如何创建多个图,每个图具有相同的图区域大小?