在多个图的外边缘处绘制一个居中的图例

Ash*_*win 6 plot r legend

我想在具有多个绘图的设备中绘制绘图区域之外的居中图例.有很多问题(略有变化)在SO中询问有关在R图中改变图例的位置的问题.

例如:

1)R - 组合图的通用标题和图例

2)R中多个图的共同图例

3)在基本图形中绘制绘图区域外的图例?

等等

现在我从上面的问题中理解的是,我必须设置选项xpd = Txpd = NA在外边缘绘制图例.但是,当我尝试这个时,它对我来说不起作用..

par(mfrow=c(1,2),oma=c(0,3,0,0),xpd=TRUE)

plot(c(5,10),col=c("red","blue"),pch=20,cex=2,bty="n",xlab="",ylab="")
barplot(c(5,10),col=c("red","blue"))

mtext(text="My two plots",side=3,cex=2,outer=TRUE,line=-3)

legend("top",legend=c("A", "B"),fill=c("red","blue"),ncol=2,xpd=NA,bty="n")  # Option 1
legend(x=0.01,y=11,legend=c("A", "B"),fill=c("red","blue"),ncol=2,xpd=TRUE,bty="n") # Option 2
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,究竟如何xpd运作?因为我无法弄清楚为什么传说不应该放在情节区域之外xpd=T.

如果有人认为这是上述问题的重复,我会提前道歉!

非常感谢帮助

阿什温

Jea*_*ams 9

选项#1可能是你应该采取的路线xpd=NA.它不会自动将图例放置在外边距中,但它允许您将图例放置在任何您想要的位置.因此,例如,您可以使用此代码将图例放置在页面顶部,大致居中.

legend(x=-1.6, y=11.6, legend=c("A", "B"), fill=c("red", "blue"), ncol=2, xpd=NA, bty="n")
Run Code Online (Sandbox Code Playgroud)

我通过反复试验选择了这些x和y值.但是,您可以定义一个函数,该函数将您创建的图上方的单个(不可见)图重叠.然后你可以使用legend("top", ...).例如

reset <- function() {
    par(mfrow=c(1, 1), oma=rep(0, 4), mar=rep(0, 4), new=TRUE)
    plot(0:1, 0:1, type="n", xlab="", ylab="", axes=FALSE)
    }

reset()
legend("top", legend=c("A", "B"), fill=c("red", "blue"), ncol=2, bty="n")
Run Code Online (Sandbox Code Playgroud)