在带有 extrafont 包的 .eps 图中使用 Arial 时出错
Error using Arial in .eps figure with extrafont package
我在 R 中使用 ggplot2 为出版物生成图形,其中所有图形都需要是 .eps 格式,所有字体都需要是 Arial。我一直在关注 this guide 使用 extrafont 包进行此操作。据我了解,行 loadfonts(device = "postscript")
应该使用 postscript 设备注册我导入的所有字体(包括 Arial)。但是当我 运行 我的代码并尝试使用此代码保存我的身材时:
ggplot() + geom_point(aes(x=xvar, y=yvar)) + theme_minimal(base_family = "Arial")
library(extrafont)
font_import()
loadfonts(device = "postscript")
ggsave(filename = "myfile.eps")
我仍然收到此错误:
Error in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y,
: family 'Arial' not included in postscript() device
我错过了什么?
而不是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)
假设您在 Windows OS 上,您也可以使用 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 处给出了自述文件。
为了将来参考,我在使用带有 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
可以。我不知道这是为什么,也不知道如何找到有效的名称列表。
我在将 extrafonts
包与 ggsave()
一起用于 eps
文件时也偶然发现了这个问题。我知道这个线程很旧,但也许我的解决方法将来可以帮助其他人。 :)
R 不擅长字体嵌入。然而,R 过去已经包含了 Cairo 图形库(因此你不需要再安装 Cairo 包了!),它可以处理嵌入。要使用 Cairo 图形库保存 .eps
,只需使用 cairo_ps
作为 device
:
ggsave(filename="Fig1.eps", plot = last_plot(), device = cairo_ps)
我在 R 中使用 ggplot2 为出版物生成图形,其中所有图形都需要是 .eps 格式,所有字体都需要是 Arial。我一直在关注 this guide 使用 extrafont 包进行此操作。据我了解,行 loadfonts(device = "postscript")
应该使用 postscript 设备注册我导入的所有字体(包括 Arial)。但是当我 运行 我的代码并尝试使用此代码保存我的身材时:
ggplot() + geom_point(aes(x=xvar, y=yvar)) + theme_minimal(base_family = "Arial")
library(extrafont)
font_import()
loadfonts(device = "postscript")
ggsave(filename = "myfile.eps")
我仍然收到此错误:
Error in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : family 'Arial' not included in postscript() device
我错过了什么?
而不是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)
假设您在 Windows OS 上,您也可以使用 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 处给出了自述文件。
为了将来参考,我在使用带有 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
可以。我不知道这是为什么,也不知道如何找到有效的名称列表。
我在将 extrafonts
包与 ggsave()
一起用于 eps
文件时也偶然发现了这个问题。我知道这个线程很旧,但也许我的解决方法将来可以帮助其他人。 :)
R 不擅长字体嵌入。然而,R 过去已经包含了 Cairo 图形库(因此你不需要再安装 Cairo 包了!),它可以处理嵌入。要使用 Cairo 图形库保存 .eps
,只需使用 cairo_ps
作为 device
:
ggsave(filename="Fig1.eps", plot = last_plot(), device = cairo_ps)