【问题标题】:Specify plot area in a multiplot在多图中指定绘图区域
【发布时间】:2013-02-07 22:07:53
【问题描述】:

我使用 par() 命令在图形设备中创建一行图并运行前 2 个图:

par(mfrow = c(1, 4))
hist(mydata)
boxplot(y ~ x)

现在假设箱线图是错误的,我想用一个新的来替换它。默认情况下,下一个图位于前一个图的左侧(或在多行布局的情况下,下一行,第一列),前一个图保持不变。

有没有办法在多图网格区域中指定下一个图的位置?

【问题讨论】:

  • 是的,有。检查par()中的选项mfg
  • @TheodoreLytras 这已在下面的 Greg 回答中讨论过。使用 mfg 不会清除之前的情节。

标签: r plot


【解决方案1】:

要在多图网格区域中指定下一个图的位置,我更喜欢使用函数layoutlayout 函数提供了 mfrowmfcol 设置的替代方法。 例如par(mfrow = c(1, 4)) 的等价物是:

     layout(matrix(c(1, 3, 2, 4), byrow=TRUE, ncol=4))

     layout(matrix(c(1, 2, 3, 4), byrow=TRUE, ncol=4))

函数layout.show()可能有助于可视化图形区域 创建的。以下代码创建了一个可视化布局的图形 在上一个示例中创建:

  layout.show(4)

【讨论】:

    【解决方案2】:

    基本图形模型是纸上墨水,不允许修改。 lattice 和 ggplot 模型基于可以修改的列表。您可以使用linespoints“返回”添加项目,并且正如所指出的,您可以将焦点更改为特定面板,但要删除或替换内容......不可能。重新运行代码应该不是什么大问题,不是吗?像素非常便宜。

    【讨论】:

    • 我在探索性数据分析过程中遇到了这个问题,而不是编程。有时我想针对我的目标绘制多个变量并进行比较。如果我错过了绘图命令中的一个参数,那么我必须从第一个绘图重新开始。没什么大不了的,但有时会很烦人。
    • 需要采用集成开发环境,以便您可以编辑和重新运行代码:RStudio 似乎是近来最流行的,尽管 ESS 是前任领导者。
    【解决方案3】:

    您可以使用parmfg 参数指定要绘制的下一帧。有关详细信息,请参阅?par。所以像这样的命令:

    par(mfg=c(1,2))
    

    将意味着下一个高级图将转到第 1 行第 2 列中的图。这可用于以您自己的自定义顺序进行绘图。但是,在大多数情况下,使用layout 可能更容易更好。

    当您使用它来指定要在 R 中绘制的框架时,假定该框架已准备好被绘制,它不会删除已经存在的任何内容,因此如果那里有一个现有的图,它将被绘制出来,您将可能会同时看到这两个情节,但看起来并不漂亮。

    您可以在现有绘图的顶部绘制一个矩形,为自己提供一个空白框以使用如下代码进行绘图:

    par(xpd=NA)
    rect( grconvertX(0, from='nfc'), grconvertY(0,from='nfc'), 
    grconvertX(1,from='nfc'), grconvertY(1, from='nfc'), 
    col='white',border='white')
    

    这可以在屏幕上查看,但在导出或打印时需要小心,在某些情况下,图形文件的打印机或解释器会将白色矩形解释为“什么都不做”,你会再次查看这两个图。

    一般来说,最好在脚本窗口中绘制超过一行或两行代码的绘图,这样如果您想更改某些内容,您可以编辑脚本并从头开始重新创建整个绘图,而不是依赖像这样的技巧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2011-02-23
      相关资源
      最近更新 更多