在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")
感谢您的帮助!
答案 0 :(得分:7)
如果您的计算机支持它(并且您可以键入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()
答案 1 :(得分:0)
pdf()描述here有一种解决方法:
替换&#34; - &#34;带有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倍的小文件)。我希望其他人可以使用它。