【发布时间】:2019-11-05 06:03:17
【问题描述】:
我正在制作一个 R 图,并希望并排放置几个图例(在绘图区域之外)。目标是自动放置图例。
我正在使用这里的方法:https://stackoverflow.com/a/34624632/4978977
这是示例代码,图右侧有两个图例:
dev.off()
par(mar=c(par('mar')[1:3], 0))
plot.new()
l1 <- legend(0, 0, bty='n', c("group A", "group B"), plot=FALSE, pch=c(1, 2), lty=c(1, 2))
l2 <- legend(0, 0, bty='n', c("group A", "group B"), plot=FALSE, pch=c(1, 2), lty=c(1, 2))
w1 <- grconvertX(l1$rect$w, to='ndc') - grconvertX(0, to='ndc')
w2 <- grconvertX(l2$rect$w, to='ndc') - grconvertX(0, to='ndc')
par(omd=c(0, 1-sum(w1, w2), 0, 1))
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(par('usr')[2], par('usr')[4], bty='n', xpd=NA, c("group A", "group B"), pch=c(1, 2), lty=c(1, 2))
legend(par('usr')[2]+l1$rect$w, par('usr')[4], bty='n', xpd=NA, c("group A", "group B"), pch=c(1, 2), lty=c(1, 2))
我可以直观地在绘图右侧获得适当的边距,以便为两个图例并排获得足够的空间。
据我了解l1$rect$w 是“用户”坐标中第一个图例的宽度。正如您在代码中看到的 - 我将此值添加到第一个图例的左侧位置以获得第二个图例位置。
结果是第二个图例向右移动但不够远,它与第一个图例的文本重叠。
如何正确指定第二个图例的位置,使其不与第一个图例重叠?
【问题讨论】:
-
我知道它不能回答您的问题,但我强烈建议您使用 ggplot2 包以获得相同的结果。 ggplot2 有很多方法可以以编程方式调整所有绘图元素的大小、位置等