有时我正在创作一个多部分的人物,而且我有一个复杂的布局,我想在盒子外面绘图。 (我用比喻和字面说这句话。)
使用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
矩阵并在上面添加一个可以容纳文本或规则的绘图区域。但我不想这样做:我想在多个布局区域叠印。
有没有办法使用基础图形来实现这一目的,或者为此目的使用一个功能,或者以某种方式欺骗绘图功能?
答案 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)
的内容。您可以使用grconvertX
和grconvertY
函数在不同的坐标系之间进行转换。
您可以通过转换为'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' )