【问题标题】:Using R's layout when columns have a different number of rows当列具有不同的行数时使用 R 的布局
【发布时间】:2019-08-08 13:30:14
【问题描述】:

我希望在 R 中创建一个具有 11 个面板的图:三个在左侧列中,八个在右侧列中。我希望左边的三个地块高度相同,右边的八个地块高度相同。

我可以使用layout 并修改页边距:但由于无法指定负页边距,这不允许我使用左列中的全部空间。此外,如果稍后将绘图发送到具有不同页面大小的 PDF 设备,边距可能看起来不同。

layout(matrix(c(1, 1, 0, 2, 2, 0, 3, 3, 3 + (1:8)), ncol=2),
       widths=c(0.33, 0.67))
par(mar=c(0, 2, 2, 2))
plot(c(1, 1))
par(mar=c(0, 2, 0, 2))
plot(c(1, 1))
par(mar=c(2, 2, 0, 2))
plot(c(1, 1))
par(mar=rep(2, 4))
for (i in 1:8) plot(c(2, 2), col='red')

有没有办法做到这一点,使左侧的三个地块大小和间距相等,并使用所有可用空间?

(edit:) MichaelChirico 指出我可以使用 8×3 行,这在本示例中是可行的,但是当存在具有不同行数的多列时会变得很麻烦;我相信布局最多只能支持 200 行。

【问题讨论】:

  • 您能否详细说明“所有可用空间”?大多数情况下,你会希望你的布局矩阵有 24 行。 LHS地块每个占用8个; RHS 地块各取 3 个。然后乱用omamar 设置来处理空白
  • 参见?split.screen - 我觉得它比layout 更麻烦,但它可以满足您的要求。

标签: r


【解决方案1】:

这是一个使用您的代码和split.screen 的示例。显然您需要调整边距。

dev.off()
split.screen(figs = c(1, 2))
split.screen(figs = c(3, 1), screen = 1)

screen(n = 3)
par(mar=c(0, 2, 2, 2))
plot(c(1, 1))

screen(n = 4)
par(mar=c(0, 2, 2, 2))
plot(c(1, 1))

screen(n = 5)
par(mar=c(0, 2, 2, 2))
plot(c(1, 1))


split.screen(figs = c(8, 1), screen = 2)

for (i in 6:13) {
  screen(n = i)
  plot(c(2, 2), col='red')
}

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 2012-07-23
    • 1970-01-01
    • 2013-11-12
    • 2011-06-14
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多