4

我想将一个常见的图例集中在两个图下方。我曾经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")

在此处输入图像描述

更新

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

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

18

而不是使用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")

在此处输入图像描述

于 2012-09-13T09:05:40.017 回答
5

par(xpd=NA)更多的是您正在寻找的东西。?par从帮助页面中提取:

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

实际上,您希望将其裁剪到设备区域而不是图形区域(例如,请参阅此博客条目,以图形方式解释绘图、图形和设备区域之间的差异)。

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

在此处输入图像描述

于 2012-09-13T08:48:16.160 回答