ggplot2 pdf导入Adobe Illustrator缺失字体AdobePiStd。

55

我使用以下命令创建了几个简单的ggplot2图,并将它们保存为PDF文件:

p <- ggplot(plotobject, aes(x=Pos, y=Pval),res=300)
ggsave(plot=p,height=6,width=6,dpi=200, filename="~/example.pdf")
如果我现在在Adobe Illustrator中打开example.pdf,我会收到以下错误消息:
字体AdobePiStd丢失。 受影响的文本将使用替代字体显示。
在ggplot2中是否有一种指定Adobe可以理解的字体(我认为这是针对点的/点)的方法,或者是否有一种方法使此字体在Adobe中工作?
/编辑只是为了澄清,文本/标签/标题都很好,只是点字体缺失 /edit2我通过使用ggsave中的EPS输出获得了可行的解决方案,但仍然希望找到一种直接在AI中打开/导入ggplot2图的PDF格式的方法

9
我有同样的问题。通过在文本编辑器中打开ggplot的pdf文件,我发现ggplot2将Zapf Dingbats指定为符号字体。那么为什么AI尝试使用不见了的AdobePiStd而不是已经存在的Zapf Dingbats呢?我不知道,但我怀疑更改ggplot2指定的字体不能解决问题。我通过将字体文件/Library/Application Support/Adobe/PDFL/8.0/Fonts/AdobePiStd.otf 从我的Mac复制到我的同事的Win7机器上以解决这个问题(将其拖放到字体控制面板上安装)。 - bdemarest
@bdemarest 那么如果我这样做,我就可以直接打开PDF文件而不会有任何问题了吗? - Sander
1
是的。现在PDF中的绘图符号会正确显示,无需进一步操作。@Jim M.的解决方案更通用(但必须针对每个文件进行操作)。 - bdemarest
4
这实际上是解决这个问题最好、最方便的方法,非常感谢!我在我的计算机中找到了字体,路径为"C:\Program Files (x86)\Adobe\Acrobat 10.0\Resource\Font",因为我购买了包括Acrobat X Pro在内的Adobe Creative Suite学生版本。我只需将字体复制到Windows字体目录中,现在我可以加载图形而不会出现任何问题了! - Philip Daubmeier
9个回答

58

虽然改变AI使用的字体效果不错,但另一种选择是通过在ggsave命令中添加参数'useDingbats'来限制ggplot2首先使用鼎形字符。

ggsave(plot=p,height=6,width=6,dpi=200, filename="~/example.pdf", useDingbats=FALSE)

3
太棒了!非常感谢,我寻找这个已经好多年了。 - Torvon
因为第二个最受欢迎的答案可能会建议这在现代 Mac 上不起作用,所以我发表评论说使用 useDingbats=FALSE 对我来说在 Mac OS X 10.13.5 和 Adobe Illustrator 22.0.0 上有效。 - tim peterson
如果AI将您的geom_point点显示为正方形,则useDingbats=FALSE也可以起作用。 - tfad334
想要补充说明的是,这也适用于tmap地图包中的tmap_save()函数。 - Eugene Chong
我的生活因此得到了显著的提升。 - MaggiB

37

我也在 Mac OS X 10.8.2 上遇到了这个问题。

这个方法解决了我的问题:

font='/Library/Application Support/Adobe/PDFL/10.9/Fonts/AdobePiStd.otf'
cp $font /Library/Fonts/
在您的系统中,使用find命令查找文件:
find / -name AdobePiStd.otf 2>/dev/null

/Applications/Adobe Photoshop CC 2018/Adobe Photoshop CC 2018.app/Contents/Required/PDFL/Resource/Fonts/AdobePiStd.otf
/Applications/Adobe Illustrator CC 2018/Adobe Illustrator.app/Contents/Required/PDFL Resource/Resource/Fonts/AdobePiStd.otf
/Applications/Adobe Acrobat DC/Adobe Acrobat.app/Contents/Resources/Resource/Font/AdobePiStd.otf

2
在当前的5个回答中,这是唯一一个我能够成功实现的。 - Drew Steen
1
刚刚测试了一下,完美无缺。虽然其他答案也能用,但这个显然是最好的一个。 - Sander
1
在Windows 7中,在C:\Program Files (x86)\Adobe\Reader 10.0\Resource\Font\中查找otf文件,然后使用右键单击>安装。(当然,阅读器的版本可能会有所不同...) - niko

10

对于在 PDF 中无法正确显示的点或标记,我通常会在 Adobe Illustrator 中使用 Zapf Dingbats 替换缺失的字体。对于简单的绘图标记,这种方法大多数情况下都能解决问题。


我在AI方面还是个新手,那我该怎么做呢?当我导入PDF并自动用方块替换它们时,AI会出现错误。这样做后,数据点是否仍然在完全相同的位置上?我在R邮件列表中读到过(找不到123主题),有人抱怨说这会使他们的数据点略微移动位置,这是我不太满意的事情。 - Sander
1
@Sander 在 AI 中 (我使用的是 Mac 的 CS4 版本),在“类型”菜单下应该有一个“查找字体”的菜单项。在对话框中,您可以在上面的框中突出显示AdobePiStd,并在将“Replace Font”从“System”拉下以显示可用字体后,在下面的框中选择Zapf Dingbats。可能会有一些微小的移位,但这可能取决于您的轴比例尺度而忽略不计。 - user666993

9
这似乎是一个反常的问题,Adobe Illustrator 找不到分发给 Adobe Reader 的字体(AdobePiStd),因此很可能已经存在。如果你在电脑上搜索,你可能会找到它。在我的 WindowsXP 系统上,它在以下路径中: C:\Program Files\Adobe\Reader 10.0\Resource\Font 找到后,你可以安装它和该文件夹中的其他字体,这将使 Illustrator 能够找到它们。 对于 R 中的其他字体/ PDF 问题,grDevices 包中的 embedFonts 函数很有用。

除了embedFonts之外,现在还有一个extrafont包,它使得在ggplot中嵌入字体变得更加容易。 - MattBagg

9

在生成PDF输出时使用useDingbats=FALSE,这样Illustrator就不会报错了。

pdf("example.pdf", useDingbats=FALSE)
ggplot(plotobject, aes(x=Pos, y=Pval),res=300)
dev.off()

我认为这是最明智的建议,因为这将确保相同的R脚本在不同的机器上运行(无论是否存在正确路径中的PiStd)。 - G Chalancon

4
编辑于2018年 下面的问题是关于最初的困惑。如上述多个答案所述,此问题的答案是pdf(useDingbats = FALSE)。为了防止您遇到字体问题,我不会删除此答案。

旧回答 AI无法识别Helvetica类型字体。在我的电脑上,这并不太重要,因为它会自动替换字体为合适的字体。当然,在某些情况下你可能想更改字体。我经常在AI中手动更改(只需选择所有文本并更改字体类型)。这里有一个关于如何在ggplot2中更改字体的线程:修改ggplot2中的字体

附注:还有另一个可能有用的线程:R图表中的字体


感谢您的建议,已更新问题。标签和标题的文本并不是问题,而是数据点本身缺少字体。 - Sander

3
你可以下载AdobePiStd字体 - 只需在Google中搜索、下载并安装即可。重启后,字体应该会正确显示。然后,你可以使用Illustrator内的“查找字体…”实用程序进行更改(如果需要)。

0

另一个简单情况下可能解决问题的选项是在Illustrator中选择未正确显示的文本对象并更改字体。Helvetica Neue 对我有用。


0

我只需要添加 alpha 规范就能解决这个问题。如果您不需要任何透明度,则可以选择 alpha 值为 0.9 ...

例如:

ggplot() + geom_point(aes(x=..,y=.., color=...), alpha=0.8)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接