2013-08-07 22 views
4

我已經安裝了'extrafont'包,以便通過ttf_import()方法安裝外部字體庫Duality。然而,經由wordcloud方法指定字體時,收到以下錯誤:r wordcloud external ttf vfont not recognized

安裝命令:

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

Wordcloud命令:

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參數不可見?我如何讓開羅(默認渲染器)可見? TIA!

+0

我使用'windowsFont'加載字體到R,然後使用'family'參數有運氣'par',讓基地的陰謀用它。 – James

+0

該功能是否對字體名稱敏感? –

+0

雖然默認的Cairo安裝不支持win字體,但我會嘗試windowsFont = \ –

回答

2

我已經能夠使用傳遞給文本familyfont並在?par而不是vfont中描述的參數來解決相同的問題。另外我需要首先加載字體。所以,事情會發生:

導入字體(對不起,OP提供的鏈接偶是不再可用,我會使用Lucida手寫來代替,可在Windows中):

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

負載(見本blog瞭解詳細信息):

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) 
+0

您如何知道如何引用字體? LHANDW和「Lucida Handwritng」之間的映射?另外,你在哪裏可以看到vfont()的合法值。有可能擡頭嗎? – user1603472

+0

@ user1603472我所做的是在我的電腦中檢查字體文件的名稱。 我使用Windows,並且據我所知,字體不在R中,但在您的操作系統中。所以我查找了我想用的字體「Fonts」文件夾,在文件上右鍵單擊我的字體並從General選項卡中獲得文件的DOS名稱,在我的情況下爲LHANDW.TTF。 關於你的問題的第二部分。您可以使用您計算機上安裝的任何字體,並且知道哪些字體可用,您只需在「字體」目錄中列出這些文件即可。 – eindzl

0

爲了補充前僱主並解釋如何實際選擇使用哪種字體。首先,進口字體(也可以設置不同於默認的路徑在font_import()

library(extrafont) 
font_import(prompt = FALSE) 

要知道有哪些字體可供選擇:

unique(fonttable()$FamilyName) 

這爲包括的內容爲「精確參考。字體家族」然後,您可以發出命令wordlcoud像這樣:

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

爲什麼font = 1從?,這裏就是它說的有關font參數:

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.