R:保存为 PDF 时可以修复图例吗?

发布于 2024-12-17 15:32:00 字数 605 浏览 0 评论 0原文

运行此代码时

plot(c(0,1), c(0, 1), type = "n")
legend("topleft", legend = c("Model", "Data"),
           lwd = c(3, NA),
           pch = c(NA, 16),
           bty = "n", inset = 0.02,
           cex = 2)

当我按预期 ,我看到以下内容: Nice legend

但是,当我将其包装在 pdf("legendTest.pdf") .. . dev.off(),保存的PDF有一条穿过该点的线。

extra line

我可以更正这个问题,还是需要以其他格式保存?我使用的是 Mac,使用预览和 Chrome 查看 PDF 时出现问题。我下载了 Adob​​e Reader 看看它做了什么,然后图例文本和 pch 点消失了,只留下模型线。

When I run this code

plot(c(0,1), c(0, 1), type = "n")
legend("topleft", legend = c("Model", "Data"),
           lwd = c(3, NA),
           pch = c(NA, 16),
           bty = "n", inset = 0.02,
           cex = 2)

as expected, I see this:
Nice legend

However, when I wrap it in pdf("legendTest.pdf") ... dev.off(), the saved PDF has a line through the point.

extra line

Can I correct this, or do I need to just save in another format? I'm on a Mac, and the problem is present viewing the PDF using Preview and Chrome. I downloaded Adobe Reader to see what it did, and then the legend text and pch point disappeared, leaving only the model line.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清音悠歌 2024-12-24 15:32:00

您可以通过显式设置线类型(参数 lty)来解决此问题,如下所示:

plot(c(0,1), c(0, 1), type = "n")
legend("topleft", legend = c("Model", "Data"),
       lwd = c(3, NA),
       lty = c(1, 0), # 0=blank, 1=solid (default). See ?par for more.
       pch = c(NA, 16),
       bty = "n", inset = 0.02,
       cex = 2)

编辑

lwd 参数的文档,位于 ?par 解释说:

'lwd' 线宽,正数,默认为“1”。这
解释是特定于设备的,有些设备没有
实现小于一的线宽。

Mac 的默认 R 图形设备一定是其中之一。 (FWIW,使用您的代码,我自己的 Windows 图形设备确实显示一条穿过数据点的线,就像在 pdf 中一样。)

无论如何,看起来使用 通常更安全ltylwd 来控制这个特定的细节。

You can fix this by explicitly setting the line type (argument lty), like this:

plot(c(0,1), c(0, 1), type = "n")
legend("topleft", legend = c("Model", "Data"),
       lwd = c(3, NA),
       lty = c(1, 0), # 0=blank, 1=solid (default). See ?par for more.
       pch = c(NA, 16),
       bty = "n", inset = 0.02,
       cex = 2)

EDIT

The documentation for the lwd argument, in ?par explains that:

'lwd' The line width, a positive number, defaulting to '1'. The
interpretation is device-specific, and some devices do not
implement line widths less than one.

Mac's default R graphical device must be one of those. (FWIW, with your code, my own Windows graphics device does show a line through the data point, just as in the pdf.)

In any case, it looks like it's generally safer to use lty than lwd to control this particular detail.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文