有什么方法可以禁用PDF / Postscript输出中的“减去黑客”?

时间:2012-05-03 19:52:22

标签: r graphics ggplot2 hyphen

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

  

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

有什么方法可以关闭此功能吗?

我遇到的问题是我经常以各种格式保存图表,如果我按照建议的“\ 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")

感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

如果您的计算机支持它(并且您可以键入capabilities()以了解它是否存在),则可以使用cairo_pdf()。它似乎更像其他绘图设备处理"-"

enter image description here enter image description here

在这里,因为我可能还包括它,是我用于上述两个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()

答案 1 :(得分:0)

pdf()描述here有一种解决方法: 替换&#34; - &#34;带有unicode字符"\255"或UTF8 "\uad"的连字符。 这可能不会很好地打印在R控制台中,但会在pdf中打印出来。 可以使用gsub("-", "\uad", "x-y)

轻松替换它

enter image description here

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倍的小文件)。我希望其他人可以使用它。