绘制无边框和白色背景的图例
Posted
技术标签:
【中文标题】绘制无边框和白色背景的图例【英文标题】:plot legends without border and with white background 【发布时间】:2012-04-23 21:13:00 【问题描述】:我在一个情节中有一个图例,一条线(来自 abline 语句)穿过它。我怎样才能使 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")
最后:有没有办法在图例语句中引入换行符?
【问题讨论】:
为什么这个问题没有被标记为已回答? 【参考方案1】:使用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")
【讨论】:
这是正确的答案。如果 R 文档实际上确实解释了 bty='n' 将导致不绘制图例框,那就太好了。相反,它只是说“n”是选项之一,而没有解释该选项的效果。我想知道 R 维护者是否会允许像我这样的人改进标准文档,例如 this。 @GeoffreyAnderson 是R
的一个大问题:文档写得很糟糕。
@olala - 据我所知,bty 表示 Box Type,因此“n”的 Box Type 是 none。【参考方案2】:
如 ?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)
换行符是用换行符\n
实现的。只需更改绘图顺序即可使这些点仍然可见。请记住,在 R 中绘图就像在一张纸上绘图:您绘制的每一件事都将放在当前存在的任何内容之上。
请注意,图例文本已被截断,因为我使绘图尺寸更小(windows.options 并非在所有 R 平台上都存在)。
【讨论】:
box.lwd=0 可以正常工作。 bty='n' 可能更好,因为这意味着图例框类型根本是 NONE。两个很好的答案! 这是一个比 bty='n' 更好的答案,因为它保留了原始问题所要求的白色背景。对于第二点,图例覆盖了线而不是点,我能看到的唯一解决方案是在图例线之后添加一个 points() 命令。以上是关于绘制无边框和白色背景的图例的主要内容,如果未能解决你的问题,请参考以下文章