在多个图中指定绘图区域

时间:2013-02-07 22:07:54

标签: r plot

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

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

现在让我们说boxplot是错误的,我想用一个新的替换它。默认情况下,下一个绘图会转到前一个绘图的左侧(如果是多行布局,则会在下面的一行,第一列),保留前一个绘图。

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

3 个答案:

答案 0 :(得分:3)

要指定多时隙网格区域中下一个绘图的位置,我更喜欢使用函数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)

enter image description here

答案 1 :(得分:2)

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

答案 2 :(得分:2)

您可以指定要绘制的下一帧使用mfg参数par。有关详细信息,请参阅?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')

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

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