【问题标题】:Multiple plots are not rendered as described by layout.show多个绘图未按照 layout.show 的描述呈现
【发布时间】:2021-12-30 13:42:59
【问题描述】:

使用raster 包及其plot 函数,我想将Raster* 对象的六个图按列排列在2 行和3 列中。因此,我这样设置布局:

layout(mat=matrix(1:6, nrow=2, ncol=3), heights=c(1,1), widths=c(2,1,1))

调用layout.show(6) 会得到这个预览,这正是我想要的:

但是,在第一个图被放置在 1 的位置之后(如预期的那样),第二个图被放置在 3 的位置(不是预期的)。 为什么?

当我再次致电layout.show(6) 时,我得到了这个,这不是我想要的:

有趣的是,使用par(mfcol=c(2,3)) 而不是layout 按行放置图(即表现得像mfrow)。

(我知道我可以重新排列 plot 调用的顺序,但我想知道为什么这不能像我预期的那样工作。)

【问题讨论】:

    标签: r plot r-raster


    【解决方案1】:

    plot(Raster*) 不能这样做,因为它会设置布局本身;从而覆盖您的设置。您可以使用image(x) 而不是plot(x),但是您不会得到图例。

    也许最好的方法是改用terra 包(terraraster 的替代品)

    f <- system.file("ex/elev.tif", package="terra")
    r <- rast(f)
    layout(mat=matrix(1:6, nrow=2, ncol=3), heights=c(1,1), widths=c(2,1,1))
    plot(r)
    plot(r*2)
    plot(r*3)
    plot(r*4)
    plot(r*5)
    plot(r*6)
    

    【讨论】:

    • 您好 Robert,感谢您的快速回复,并对缺少的示例感到抱歉。 “设置布局本身”是什么意思?它也调用layout 并因此覆盖我以前的设置?我会调查image,因为我不一定需要传奇。使用terra 不是一个选项,因为这是我的论文,我研究不同库之间重新网格化算法的差异,所以在这种情况下使用raster 是非常重要的;)
    • 是的,它会覆盖以前的设置。但是您可以使用 terra plot Raster* objects plot(rast(x)) --- 我想您实际上想用相同的方法绘制所有内容?
    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多