R中的词云(Wordcloud)包无法识别外部TTF字体。

6
我已经安装了“extrafont”包,以安装外部字体库Duality通过ttf_import()方法。然而,在通过wordcloud方法指定字体时,我收到以下错误信息:

安装命令:

# Assuming the font file, DUALITY_.ttf, is in the working directory (see link to font above)
font_import(".",FALSE,pattern="DUALITY")

词云命令:

wordcloud(ap.d$word, ap.d$freq, scale=c(8,2), min.freq=10, vfont=c("Duality","plain"),
      random.order=FALSE, rot.per=0, use.r.layout=FALSE, colors=pal2, fixed.asp=FALSE)

输出:

Error in strwidth(words[i], cex = size[i], ...) : 
  invalid 'vfont' value [typeface -2147483648]

为了验证字体是否确实已安装,我执行了以下命令。
> choose_font("Duality")
[1] "Duality"
> fonts()
....[49] "Waree"                    "Duality"    

Duality字体为什么在wordcloud的vfont参数中不可见?如何使其在Cairo(默认渲染器)中可见。谢谢!


我在R中使用'windowsFont'成功加载了字体,并使用par的'family'参数来允许基本图使用它。 - James
该函数是否对字体名称大小写敏感? - Roman Luštrik
我会尝试使用windowsFont,尽管默认的Cairo安装不支持Windows字体 =\ - Paul Rigor
2个回答

4

我能够通过使用传递给文本 familyfont 的参数来克服相同的问题,并且在 ?par 中进行描述,而不是使用 vfont。另外,我需要先加载字体。所以事情变成了这样:

导入字体(很抱歉,OP中提供的Duality链接已不再可用,我改用Windows中提供的Lucida Handwriting):

library(extrafont)
font_import(pattern="LHANDW")

Load (具体请参见博客):

loadfonts() # loadfonts(device = "win") if you are working in windows

词云:

wordcloud(ap.d$word, ap.d$freq, scale=c(8,2), min.freq=10, family="Lucida Handwriting", font=1,
  random.order=FALSE, rot.per=0, use.r.layout=FALSE, colors=pal2, fixed.asp=FALSE)

你怎么知道该如何引用字体?LHANDW与“Lucida Handwritng”之间的映射是什么?另外,你在哪里可以看到vfont()的合法值是什么?有可能查找吗? - user1603472
@user1603472 我所做的是检查我电脑上字体文件的名称。我使用的是Windows系统,据我所知,字体不在R中,而是在您的操作系统中。因此,我在“字体”文件夹中寻找我想要使用的字体,右键单击我的字体文件并从常规选项卡中获取文件的DOS名称,在我的情况下是LHANDW.TTF。关于您问题的第二部分,您可以使用计算机上安装的任何字体,并且要知道可用的字体,您只需列出“字体”目录中的文件即可。 - eindzl

1
为了补充之前的回答,并解释如何选择要使用的字体。首先,导入字体(可以在font_import()中设置不同于默认路径的路径。
library(extrafont)
font_import(prompt = FALSE)

了解可用的字体:

unique(fonttable()$FamilyName)

这里提供了“字体族”应包含的确切参考内容。然后,您可以像这样执行wordcloud命令:
wordcloud(c(letters, LETTERS, 0:9), seq(1, 1000, len = 62), family = "Carlito", font = 1)

为什么要使用font = 1?从?par()中,关于font参数的说明如下:

一个整数,用于指定文本使用的字体。如果可能,设备驱动程序会安排1对应普通文本(默认值),2对应粗体,3对应斜体和4对应粗斜体。


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