将图例置于r中两个图的下方

时间:2012-09-13 08:30:48

标签: r legend par

我想将一个共同的传说集中在两个地块下面。我使用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")

enter image description here

更新

通过下面的解决方案,可以通过拖动边缘来改变图形的尺寸,从而切割图形的边缘(见下文)。有什么想法可能会发生什么?

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:14)

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

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

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")

enter image description here

答案 1 :(得分:4)

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")

enter image description here