如何绘制几个布局区域

时间:2013-03-31 02:18:06

标签: r plot

有时我正在创作一个多部分的人物,而且我有一个复杂的布局,我想在盒子外面绘图。 (我用比喻和字面说这句话。)

使用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)

这会产生以下绘图布局。 (我使用图像编辑软件添加了红色文字)

enter image description here

这是在框外绘图的一个应用:在所示区域中叠印文本。同样,可能需要叠印另一个图形元素。例如,绘制一个跨越框的规则。

我知道可以扩展multiPartFigureLayout矩阵并在上面添加一个可以容纳文本或规则的绘图区域。但我不想这样做:我想在多个布局区域叠印。

有没有办法使用基础图形来实现这一目的,或者为此目的使用一个功能,或者以某种方式欺骗绘图功能?

2 个答案:

答案 0 :(得分:4)

mtext("even longer test of overplotting to see if it extends across the plots" , line=-1, col="red")
?mtext
如果使用负“线”值,

mtext可以在图形区域的内部和跨越边界进行注释。 (mtext的旁边参数默认为3(=“top”)。如果您尝试使用text,您会发现它难以越过区域边界。我尝试使用{{1 }}作为参数xpd=TRUE获取但未成功。也许在text调用之前将其与par()一起使用将允许它工作。

答案 1 :(得分:2)

绘制超出当前情节集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' )