r wordcloud external ttf vfont not recognized

隐身守侯 提交于 2019-12-09 12:43:01

问题


I've installed the 'extrafont' package in order to install an external font library Duality via the ttf_import() method. However, when specifying the font via the wordcloud method, I receive the following error:

Installation command:

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

Wordcloud command:

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)

Output:

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

In order to verify that the font is indeed installed, I issued the following commands

> choose_font("Duality")
[1] "Duality"
> fonts()
....[49] "Waree"                    "Duality"    

How come the Duality font is not visible to the vfont parameter of wordcloud? And how do I make it visible to Cairo (the default renderer). TIA!


回答1:


I've been able to overcome the same problem using the parameters passed to text family and font and described in ?par instead of vfont. Also I needed to load the font first. So the thing goes:

Import the font (sorry, the link to Duality provided in OP is no longer available, I use Lucida Handwriting instead, available in windows):

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

Load (see this blog for details):

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

Wordcloud:

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)



回答2:


To complement previous answers, and explain how one can actually choose which fonts to use. First, import fonts (it is possible to set a path different from the default in font_import()

library(extrafont)
font_impohttps://stackoverflow.com/questions/25605185/how-do-i-add-a-changelog-or-news-file-to-my-r-packagert(prompt = FALSE)

To know which fonts are available:

unique(fonttable()$FamilyName)

This presents the exact reference for what to include as "font family". You can then issue the wordcloud command like this:

wordcloud(c(letters, LETTERS, 0:9), seq(1, 1000, len = 62), family = "Carlito", font = 1)

Why font = 1? From ?par(), here's what it says about the font parameter:

An integer which specifies which font to use for text. If possible, device drivers arrange so that 1 corresponds to plain text (the default), 2 to bold face, 3 to italic and 4 to bold italic.



来源:https://stackoverflow.com/questions/18108512/r-wordcloud-external-ttf-vfont-not-recognized

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!