【问题标题】:Centring legend below two plots in r在 r 中的两个图下方居中图例
【发布时间】:2012-09-06 07:23:55
【问题描述】:

我想将一个常见的图例放在两个图下方的中心。我使用xpd=TRUE 允许在情节本身之外打印,并使用 oma 为图例创造空间。然而,图例不会水平移动,而是垂直“提前”剪裁。有什么建议吗?

quartz(title="PCoA",12,6)
par(mfrow=c(1,2),oma=c(5,0,0,0),xpd=TRUE)

plot(1:3,4:6,main="plot 1")

plot(1:3,4:6,main="plot 2")


# Clips the plot    
legend(1,3.5,ncol=3,c("0-1 km","1-5 km","outside barrier"),fill=c("green","orange","red"), title="Fetch")

# Won't let me move the legend sideways 
legend(0,3.5,ncol=3,c("0-1 km","1-5 km","outside barrier"),fill=c("green","orange","red"), title="Fetch")

更新

使用下面的解决方案,它会通过拖动边缘来更改图形的尺寸来切割图形的边缘(见下文)。任何想法可能会发生什么?

【问题讨论】:

    标签: r legend par


    【解决方案1】:

    建议你使用layout(),而不是par=mfrow(...)

    这允许您指定具有绘图位置的矩阵:

    layout(matrix(c(1,2,3,3), ncol=2, byrow=TRUE), heights=c(4, 1))
    
    par(mai=rep(0.5, 4))
    plot(1:3,4:6,main="plot 1")
    plot(1:3,4:6,main="plot 2")
    
    par(mai=c(0,0,0,0))
    plot.new()
    legend(x="center", ncol=3,legend=c("0-1 km","1-5 km","outside barrier"),
           fill=c("green","orange","red"), title="Fetch")
    

    【讨论】:

    • 再次感谢您的回答。我似乎在使用这个解决方案时遇到了麻烦,因为它切断了图表的边缘(请参阅更新中图表右侧的右侧)。如果我“挤压”图形,则该点变得可见。我使用的设置与您上面显示的相同。知道会发生什么吗?
    • 我想您已经看过latticeggplot 以实现与刻面相同的效果?这就是我要做的,而不是费力地手动放置图例。
    • Hmm..no 我只是按照上面的建议使用 layout()。我应该放弃上述方法并改用 lattice 吗?
    • 可能。或ggplot。 (恕我直言)。但这取决于你的问题。这些包非常适合具有不同方面的数据。显然,如果你想用一个共同的图例创建完全不同的图,你会遇到同样的问题。
    • x 和 y 标签在像这样绘制时似乎不显示,出于某种原因。
    【解决方案2】:

    par(xpd=NA) 更符合您的需求。摘自?par帮助页面:

    xpd
    一个逻辑值或 NA。如果为 FALSE,所有绘图都被剪裁到绘图区域,如果为 TRUE,所有绘图都被剪裁到图形区域,如果为 NA,所有绘图都被剪裁到设备区域。另见clip

    确实,您希望将其剪裁到设备区域而不是图形区域(例如,请参阅 this blog entry,以图形方式说明绘图、图形和设备区域之间的差异)。

    quartz(title="PCoA",12,6)
    par(mfrow=c(1,2),oma=c(5,0,0,0),xpd=NA)
    
    plot(1:3,4:6,main="plot 1")
    
    plot(1:3,4:6,main="plot 2")
    legend(-0.5,3.5,ncol=3,c("0-1 km","1-5 km","outside barrier"), 
        fill=c("green","orange","red"), title="Fetch")
    

    【讨论】:

    • 谢谢。总是很高兴看到做事情的替代方法。
    • 如果您打算使用这种方法,那么您还应该学习 grconvertXgrconvertY 函数来查找放置图例的坐标。
    • 是巫师。我运行了这段代码,但我没有得到像你一样的输出。
    猜你喜欢
    • 2017-02-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多