绘制无边框和白色背景的图例

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() 命令。

以上是关于绘制无边框和白色背景的图例的主要内容,如果未能解决你的问题,请参考以下文章

创建具有精确大小且无填充的图形(以及轴外的图例)

QT自绘标题和边框

android黑色边框如何去掉

WPF 按钮无边框无背景

WPF 窗口去除顶部边框(正宗无边框)

Qt开源作品18-无边框背景透明窗体