我在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()设备
中
我错过了什么?
答案 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 device
,In title(...) : font metrics unknown for character 0x4d
和font width unknown
。
事实证明,extrafont需要ghostscript,这些错误消息一点也不清楚。事实上,我安装了ghostscript,但(至少在我的情况下)它也必须在Path环境变量中注册,如here所述(替换你的版本号)。
即使已经存在,但似乎不是names(postscriptFonts())
和fonttable()
中列出的字体名称可以使用。 Arial
和Times New Roman
(或TimesNewRoman
或TimesNewRomanPSMT
)对我不起作用,而是ArialMT
和Times
。我不知道为什么会这样,以及如何找到可行的名单。
答案 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)