安装字体以便 R postscript() 设备可以识别它们

lle*_*lls 5 fonts r ggplot2 extrafont

根据这篇文章中的建议,我试图将衬线字体(或字体“系列”)安装到 R 中,以便我可以将 ggplots 保存为 .eps 文件。尽管提供的建议有效,但我想尝试解决该问题以供将来使用。

这是生成问题的代码。

library(bayesplot)
df <- data.frame(xVar = rnorm(1e4,0,1), yVar = rnorm(1e4,2,1), zVar = rnorm(1e4,4,1))
t <- bayesplot::mcmc_trace(df) 
t
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在当我去保存这个数字时......

ggplot2::ggsave(filename = "tPlot.eps", 
                plot = t, 
                device = "eps", 
                dpi = 1200, 
                width = 15,
                height = 10, 
                units = "cm")
Run Code Online (Sandbox Code Playgroud)

...它抛出错误

Error in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)) : 
  family 'serif' not included in postscript() device
Run Code Online (Sandbox Code Playgroud)

在上一篇文章中,回答者建议我下载该extrafont软件包。

我跑了

View(fonttable())
Run Code Online (Sandbox Code Playgroud)

但衬线字体似乎没有安装。

然后我尝试了

font_addpackage(pkg = "serif")
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

Error in font_addpackage(pkg = "serif") : 
  Unknown font package type: not type1 or ttf.
Run Code Online (Sandbox Code Playgroud)

有谁知道如何安装衬线字体以便 R 可以识别/使用它?

Rui*_*das 4

对于软件包,extrafont必须先安装字体,然后才能供用户使用。这是通过 function 完成的font_import

library(extrafont)

font_import()    # This takes several minutes
Run Code Online (Sandbox Code Playgroud)

现在我们可以看到已安装和可用的字体。从文档来看,help("fonts").

描述

显示在字体表中注册的字体(并且可用于嵌入)

fonts_installed <- fonts()

serif1 <- grepl("serif", fonts_installed, ignore.case = TRUE)
sans1 <- grepl("sans", fonts_installed, ignore.case = TRUE)

fonts_installed[serif1 & !sans1]

sum(serif1 & !sans1)
#[1] 458
Run Code Online (Sandbox Code Playgroud)

有 458 种可用字体。
查看字体表的另一种方法是使用函数fonttable,但返回的字体不一定可用于嵌入。从help("fonttable")

描述

返回完整的字体表

请注意,该函数返回一个数据帧,因此调用str下面(输出省略)。

df_font <- fonttable()
str(df_font)

serif2 <- grepl("serif", df_font$FontName, ignore.case = TRUE)
sans2 <- grepl("sans", df_font$FontName, ignore.case = TRUE)

df_font$FontName[serif2 & !sans2]
Run Code Online (Sandbox Code Playgroud)

最后看看绘图功能是否可以在 postscript 设备上运行。

library(bayesplot)

df <- data.frame(xVar = rnorm(1e4,0,1), yVar = rnorm(1e4,2,1), zVar = rnorm(1e4,4,1))
p <- bayesplot::mcmc_trace(df)
p

ggplot2::ggsave(filename = "tPlot.eps", 
                plot = p, 
                device = "eps", 
                dpi = 1200, 
                width = 15,
                height = 10, 
                units = "cm")
Run Code Online (Sandbox Code Playgroud)