问题
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