在绘图区域外用基本图形绘制一个图例?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

正如标题所示:使用基本图形时,如何在绘图区域外绘制图例?

我想过摆弄一下layout并产生一个只包含传说的空洞情节,但我会对使用基本图形设施的方式感兴趣,例如par(mar = )在图例右侧获得一些空间。

这里是一个例子:

plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
legend(1,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))

生产:

但如前所述,我希望图例不在绘图区域内(例如,在图形/绘图的右侧。

提问于
用户回答回答于

也许你需要的是par(xpd=TRUE)让东西在绘图区外画出来。所以如果你和你一起做主要情节,bty='L'右边会有一些传说的空间。通常情况下,这会被剪辑到剧情区域,但是par(xpd=TRUE)通过一些调整:

 set.seed(1) # just to get the same random numbers
 par(xpd=FALSE) # this is usually the default

 plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2), bty='L')
 # this legend gets clipped:
 legend(2.8,0,c("group A", "group B"), pch = c(1,2), lty = c(1,2))

 # so turn off clipping:
 par(xpd=TRUE)
 legend(2.8,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))
用户回答回答于

下面是一个例子,其中图例右侧的图例对齐顶部(使用关键字"topright")。

# Random data to plot:
A <- data.frame(x=rnorm(100, 20, 2), y=rnorm(100, 20, 2))
B <- data.frame(x=rnorm(100, 21, 1), y=rnorm(100, 21, 1))

# Add extra space to right of plot area; change clipping to figure
par(mar=c(5.1, 4.1, 4.1, 8.1), xpd=TRUE)

# Plot both groups
plot(y ~ x, A, ylim=range(c(A$y, B$y)), xlim=range(c(A$x, B$x)), pch=1,
               main="Scatter plot of two groups")
points(y ~ x, B, pch=3)

# Add legend to top right, outside plot region
legend("topright", inset=c(-0.2,0), legend=c("A","B"), pch=c(1,3), title="Group")

第一个值inset=c(-0.2,0)可能需要根据图例的宽度进行调整。

扫码关注云+社区