【问题标题】:How to plot across several layout regions如何跨多个布局区域进行绘图
【发布时间】:2013-03-31 02:18:05
【问题描述】:

有时我正在编写一个多部分图形,并且我有一个复杂的布局,我想在框外绘制。 (我是形象地和字面地这么说)。

考虑使用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 矩阵并在上方添加一个可以保存文本或规则的绘图区域。但我不想这样做:我想在多个布局区域中叠印它。

有没有办法使用基本图形来做到这一点,要么为此目的使用功能,要么以某种方式欺骗绘图功能?

【问题讨论】:

  • 我猜我们对“绘图”这个词有不同的含义。我将点、线和曲线视为“绘图”,将图例和文本的添加视为“注释”。但这是你的问题。
  • 感谢您的回答@DWin,正确且有用。但我认为我应该扩展它以使其对其他人更有用。请参阅我关于绘制其他图形元素(例如规则)的编辑。

标签: r plot


【解决方案1】:
mtext("even longer test of overplotting to see if it extends across the plots" , line=-1, col="red")
?mtext

mtext 可以在图形区域的内部和边界之间进行注释,如果您使用负“线”值。 (mtext 的边参数默认为 3 (="top")。如果您尝试使用 text,您会发现它难以超出区域边界。我尝试使用 xpd=TRUE 作为参数 @ 987654326@ 得到但没有成功。也许在调用text 之前将它与par() 一起使用可以让它工作。

【讨论】:

    【解决方案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' )
    

    【讨论】:

    • par(xpd=NA) 与这些鲜为人知的功能相结合,整个设备都是您的绘图设备。非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多