6

在 R 中,将绘图保存到 PDF 或 Postscript 文件时,轴标签中的连字符会变成减号。显然,这是设计使然。根据“后记”设备的文档:

[正常编码规则]有一个例外。字符 45 ('"-"') 始终设置为减号(它在 Adob​​e ISOLatin1 中的值),即使它在其他编码中是连字符。连字符在所有拉丁编码、西里尔文和希腊文中都可用作字符 173(八进制 0255)。(这可以在 UTF-8 语言环境中输入为 '"\uad"'。)

有什么办法可以关闭这个功能吗?

我遇到的问题是我经常以各种格式保存绘图,如果我遵循建议的“\uad”解决方法,我会在 Postscript/PDF 输出中得到预期的连字符,但在将绘图渲染到其他图形设备(如 PNG)时却没有. 我宁愿不必为每个绘图创建两个版本,一个用于 PDF,一个用于 PNG。

如果我可以禁用“减号黑客”,那么图形设备之间的渲染行为将是一致的,我可以简单地“打印”一个图到多个设备上以获取不同格式的图。例如,我希望能够执行以下操作,并让连字符在 PDF 和 PNG 版本的绘图中一致地呈现:

p <- qplot(arrival_rate, mean_service_time, data = response_times, ...)
ggsave(p, file = "/tmp/service-scaling.pdf", useDingbats = F)
ggsave(p, file = "/tmp/service-scaling.png")

谢谢你的帮助!

4

2 回答 2

8

如果您的机器支持它(并且您可以键入capabilities()以了解它是否支持),您可以改用cairo_pdf(). 它似乎"-"更像其他绘图设备一样处理:

在此处输入图像描述 在此处输入图像描述

在这里,因为我不妨包括它,是我用于上述两个 pdf 的代码:

cairo_pdf("cairo_pdf.pdf", width=6, height=3.5)
    par(mar=c(10,4,4,1))
    plot(1:10, type = "n", axes = FALSE, 
         main = "Plotted using cairo_pdf()",
         ylab = "", xlab = "x-y", cex.lab = 10)
dev.off()

pdf("pdf.pdf", width=6, height=3.5)
    par(mar=c(10,4,4,1))
    plot(1:10, type = "n", axes = FALSE, 
         main = "Plotted using pdf()",
         ylab = "", xlab = "x-y", cex.lab = 10)
dev.off()
于 2012-05-03T23:13:20.957 回答
2

此处描述的 pdf() 有一个解决方法:用 unicode 字符"\255"或 UTF8替换“-”连字符"\uad"。这可能无法在 R 控制台中很好地打印,但会在 pdf 中。它可以很容易地替换为gsub("-", "\uad", "x-y")

在此处输入图像描述

pdf("pdf.pdf", width=5, height=4)
par(mar=c(6,2,2,2), mfrow=c(2,1))
plot(1:10, type = "n", axes = FALSE, 
     main = "Default",
     ylab = "", xlab = "x-y", cex.lab = 8)
plot(1:10, type = "n", axes = FALSE, 
     main = "with '\\uad'",
     ylab = "", xlab = gsub("-", "\uad", "x-y"), cex.lab = 8)
dev.off()

我结束了使用此解决方案,因为我想以 CMYK 颜色模式导出 pdf,这在 cairo_pdf 中是不可能的(并且稍后转换为 CMYK 的替代方法使小文件的文件大小增加了 10 倍)。我希望其他人可以使用它。

[编辑]:添加了一个缺失的“”(这是为了避免 6 个字符的限制)

于 2018-01-29T21:35:31.597 回答