使用带有extrafont包的.eps图中的Arial时出错

时间:2015-03-04 19:41:37

标签: r fonts ggplot2 eps

我在R中使用ggplot2为出版物生成数字,其中所有数字都需要为.eps格式,所有字体都需要为Arial。我一直在使用extrafont包关注this guide这样做。据我了解,行loadfonts(device = "postscript")应该注册我导入的所有字体(包括Arial)和postscript设备。但是,当我运行我的代码并尝试使用此代码保存我的数字时:

ggplot() + geom_point(aes(x=xvar, y=yvar)) + theme_minimal(base_family = "Arial")
library(extrafont)
font_import()
loadfonts(device = "postscript")
ggsave(filename = "myfile.eps")

我仍然收到此错误:

  

grid.Call中的错误(L_textBounds,as.graphicsAnnot(x $ label),x $ x,x $ y,   :家庭'Arial'未包含在postscript()设备

我错过了什么?

4 个答案:

答案 0 :(得分:5)

假设您使用的是Windows操作系统,您也可以使用showtext包创建图表。

library(showtext)
## add the Arial font
font.add("Arial", regular = "arial.ttf",
    bold = "arialbd.ttf", italic = "ariali.ttf", bolditalic = "arialbi.ttf")

setEPS()
postscript("some_graph.eps")
showtext.begin() ## call this function after opening a device

ggplot() + geom_point(aes(x=xvar, y=yvar)) +
    theme_minimal(base_family = "Arial")

dev.off()

缺点是你不能使用ggsave()功能,而是自己调用设备功能。

对于showtext包的使用,自述文件位于https://github.com/yixuan/showtext

答案 1 :(得分:2)

为了将来的参考,我也很难在Arial上使用extrafont(但在Windows上),结果发现有多种原因。

我收到的错误有:Error in title(...) : metric information not available for this deviceIn title(...) : font metrics unknown for character 0x4dfont width unknown

事实证明,extrafont需要ghostscript,这些错误消息一点也不清楚。事实上,我安装了ghostscript,但(至少在我的情况下)它也必须在Path环境变量中注册,如here所述(替换你的版本号)。

即使已经存在,但似乎不是names(postscriptFonts())fonttable()中列出的字体名称可以使用。 ArialTimes New Roman(或TimesNewRomanTimesNewRomanPSMT)对我不起作用,而是ArialMTTimes。我不知道为什么会这样,以及如何找到可行的名单。

答案 2 :(得分:1)

在将 extrafonts 包与 ggsave() 一起用于 eps 文件时,我也偶然发现了这个问题。我知道这个线程很旧,但也许我的解决方法将来可能会帮助其他人。 :)

R 不擅长字体嵌入。但是,R 过去已经包含了 Cairo 图形库(因此您不再需要安装 Cairo 包!),它能够处理嵌入。要使用 Cairo 图形库保存 .eps,只需将 cairo_ps 用作 device

ggsave(filename="Fig1.eps", plot = last_plot(), device = cairo_ps)

答案 3 :(得分:0)

而不是extrafont

library(ggplot2)
plot <- ggplot(mtcars, aes(wt, qsec)) + 
  geom_point() + 
  theme(text = element_text(family = "Arial"),
        axis.title = element_text(size = 22))

ggsave(filename = "myfile.eps",plot)