如何在多个布局区域绘图

3

有时候我会制作一个多部分图形,需要进行复杂的布局,并且希望在框之外进行绘制。这既是字面意义上的,也是比喻上的。

考虑以下示例,使用R的基本图形函数layout()设置复杂的布局:

## Define the layout regions
multiPartFigureLayout <- structure(c(4, 4, 1, 1, 2, 2, 3, 3, 8, 8, 
                                         5, 5, 1, 1, 2, 2, 3, 3, 8, 8, 
                                         9, 9, 1, 1, 2, 2, 3, 3, 8, 8, 
                                         6, 6, 1, 1, 2, 2, 3, 3, 8, 8, 
                                         7, 7, 1, 1, 2, 2, 3, 3, 8, 8), 
                                         .Dim = c(10L, 5L))

## Demonstrate the layout
win.graph(4, 5)
layout(multiPartFigureLayout)
layout.show(9)

这将产生以下绘图布局。(我使用图像编辑软件添加了红色文本)
这是绘制超越边界的一个应用:在所示区域中叠印文本。同样,可能需要在其他图形元素上叠印。例如,绘制跨越框的标尺。
我知道可以展开 multiPartFigureLayout 矩阵并添加一个绘图区域,该区域可以容纳文本或规则。但我不想这样做:我想在多个布局区域中重叠它。
是否有一种方法可以使用基本图形来实现这一点,无论是使用此目的的功能还是通过某种方式欺骗绘图函数?

我猜我们对“绘图”这个词有不同的理解。我认为点、线和曲线是“绘图”,而添加图例和文本则是“注释”。但这是你的问题。 - IRTFM
我很感激你的回答@DWin,它是正确和有用的。但我认为我应该扩展一下它,使其对其他人更有用。请查看我的编辑,关于绘制其他图形元素(例如规则)。 - digitalmaps
2个回答

4
mtext("even longer test of overplotting to see if it extends across the plots" , line=-1, col="red")
?mtext
mtext可以在图形区域内外进行注释,如果您使用负数的“line”值。(mtext的side参数默认为3(="top")。如果您尝试使用text,您会发现它很难扩展到区域边界之外。我尝试使用xpd = TRUE作为text的参数来实现这一点,但没有成功。也许在调用text之前使用par()可以使其正常工作。

3
要画出超出当前绘图集的元素,请使用par(xpd=NA)。 您可以使用函数grconvertXgrconvertY在不同的坐标系之间进行转换。
您可以通过将其转换为“ndc”坐标来保存一个绘图中的位置,然后在另一个绘图中将其从这些坐标转换为用户坐标,也可以使用这些函数查找相对于当前绘图、图形或设备的坐标以供传递给其他函数。例如:
layout( matrix( c(1,2,3,2), 2 ) )
par(xpd=NA)
with(iris, plot(Sepal.Width, Sepal.Length, col=Species) )
save1.x <- grconvertX( 0.25, from='npc', to='ndc' )
save2.x <- grconvertX( iris$Sepal.Width[1], to='ndc' )
save2.y <- grconvertY( iris$Sepal.Length[1], to='ndc' )
with(iris, plot(Petal.Width, Petal.Length, col=Species) )
with(iris, arrows( Petal.Width[1], Petal.Length[1], 
   grconvertX( save2.x, from='ndc' ), 
   grconvertY( save2.y, from='ndc' ), col='orange' ) )
with( iris, plot( Petal.Length, Sepal.Length, col=Species ) )
segments( grconvertX( 0.75, from='npc' ), grconvertY(0.9, from='npc'),
   grconvertX( save1.x, from='ndc'), col='purple' )

1
通过使用 par(xpd=NA) 结合这些不太常用的函数,整个设备都可以用于绘图。非常好。 - digitalmaps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接