显示在iOS设备上使用R创建的PDF图形的问题

Kie*_*ran 5 pdf r ggplot2 ios

我在R中制作了一些图.生成的PDF在iPhone等iOS设备上无法正常显示.例如,这是一个以PDF格式创建的股票ggplot2图:

library(ggplot2)
mpg.eg <- within(mpg[1:74,], {
  model <- reorder(model, cty)
  manufacturer <- reorder(manufacturer, -cty)
})

pdf(file="figures/ios-example.pdf")
p <- qplot(cty, model, data=mpg.eg)
p + facet_grid(manufacturer ~ ., scales="free", space="free") +
  opts(strip.text.y = theme_text())
dev.off()
Run Code Online (Sandbox Code Playgroud)

在iPhone上查看时,不会显示点图中的点.例如,如果您使用的是iOS设备,请参阅生成的pdf.

我从阅读文档中了解到,这很可能是有限的字体可用性和iOS上的PDF渲染变幻莫测的问题,而不是R中的pdf创建问题.我曾经想过可能在PDF中嵌入字体

embedFonts("figures/ios-example.pdf")
Run Code Online (Sandbox Code Playgroud)

会解决问题,但事实并非如此.除了让这个数字以其他格式提供之外,我还能做些什么来解决这个iOS问题吗?

zwo*_*wol 5

embedFonts默认情况下不嵌入标准 PDF 字体集,因此实际上不会对您的示例 PDF 进行任何重大更改。试试吧

embedFonts("figures/ios-example.pdf",
           options="-dSubsetFonts=true -dEmbedAllFonts=true")
Run Code Online (Sandbox Code Playgroud)

如果不起作用也可以-dPDFSETTINGS=/printer在那里加上“ ”。

[编辑 2020 年 8 月:使用当前版本的 R,要尝试的另一件事是从pdf设备切换到cairo_pdf设备。cairo_pdf使用更复杂的 PDF 生成库,除其他外,它还嵌入了字体本身。]

不过,就其价值而言,您的示例在我必须使用的唯一 iOS 设备(iPad,操作系统版本 4.2.1)上正确显示。

  • 感谢您及时的回复。您的解决方案适用于添加到其他两个选项的 `-dPDFSETTINGS=/printer` 选项。我可以在 iPhone 3GS 而不是 iPad 上访问 4.2.1,但它肯定在那里失败了。 (3认同)

had*_*ley 5

您也可以尝试告诉 R 不要使用 Dingbats 字体来绘制点: pdf(..., useDingbats = F)

  • 没错,但另一方面,“embedFonts”通过 Ghostscript 运行 PDF,这意味着实际内容流现在被压缩,并且 (IIRC) 冗余绘图操作符被删除,这与 R 本身不同。这可以轻松地弥补字体的大小。 (2认同)