无边框且白色背景的图例

66

我在一张图中有一个带有一条直线(来自 abline 语句)的图例。如何实现在图例附近直线不可见?这可以通过将图例背景设置为白色、没有边框来实现,但我该如何做到这一点呢?

假设图形应该是这样的:

windows.options(width=30, height=12)
plot(1:10)
abline(v=seq(1,10,1), col='grey', lty='dotted')
legend(4.8, 3, "This legend text should not be disturbed by the dotted grey lines")

更进一步的问题是: 如果图例与散点图上的点产生干扰:如何实现在图例附近让 ablines 不可见(如上所示),但是散点仍然可见?

windows.options(width=30, height=12)
plot(1:10)
abline(v=seq(1,10,1), col='grey', lty='dotted')
legend(1, 5, "This legend text should not be disturbed by the dotted grey lines, but the plotted dots should still be visible")

最后:是否有办法在图例说明中添加换行?


3
为什么这个问题没有被标记为已回答? - and-bri
2个回答

126

使用 legend 中的选项 bty = "n" 可以移除图例周围的框。例如:

legend(1, 5,
       "This legend text should not be disturbed by the dotted grey lines,\nbut the plotted dots should still be visible",
       bty = "n")

3
这是正确答案。如果 R 文档直接解释 bty='n' 会导致不绘制图例框,那就更好了。但实际上它只是说 'n' 是其中一个选项,而没有解释该选项的效果。我想知道 R 维护者是否会允许像我这样的人改进标准文档,比如这个问题。 - Geoffrey Anderson
1
@GeoffreyAnderson 这确实是 R 的一个巨大问题:文档写得非常糟糕。 - Jim
@olala - bty 我的理解是 Box Type,所以 "n" 的 Box Type 是 None。 - Badger

28

?legend所述,您需要按照以下方式完成此操作:

plot(1:10,type = "n")
abline(v=seq(1,10,1), col='grey', lty='dotted')
legend(1, 5, "This legend text should not be disturbed by the dotted grey lines,\nbut the plotted dots should still be visible",box.lwd = 0,box.col = "white",bg = "white")
points(1:10,1:10)

这里输入图片描述

在R中,换行可以通过换行符\n实现。只需改变绘图顺序即可使得点仍然可见。请记住,在R中绘图就像在纸上画画一样:每一次绘制的东西都会放在当前已有的图形之上。

请注意,由于我将绘图尺寸缩小了(windows.options并不存在于所有R平台上),所以图例文本被截断了。


2
box.lwd=0 可以正常工作。bty='n' 可能更好,因为它意味着图例框类型根本就是无。两个都是好答案! - Geoffrey Anderson
3
这个答案比 bty='n' 更好,因为它保留了白色背景,这也是原问题所要求的。对于第二点,在图例遮盖线但不遮盖点的情况下,我唯一能想到的解决方法是在图例线之后添加一个 points() 命令。 - slammaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接