R語言學(xué)習(xí) - 圖形設(shè)置中英字體
繪制生信寶典調(diào)查總結(jié)文中的柱狀圖時(shí),出現(xiàn)了中文亂碼,就搜索了下解決方案,記錄如下。
修改圖形的字體
# 修改坐標(biāo)軸和legend、標(biāo)題的字體
theme(text=element_text(family="Arial"))
# 或者
theme_bw(base_family="Arial")
# 修改geom_text的字體
geom_text(family="Arial")ggplot2支持中文字體輸出PDF
showtext包可給定字體文件,加載到R環(huán)境中,生成新的字體家族名字,后期調(diào)用這個(gè)名字設(shè)定字體,并且支持中文寫入pdf不亂碼
library(showtext)
showtext.auto(enable=TRUE)
font_path = "FZSTK.TTF"
font_name = tools::file_path_sans_ext(basename(font_path))
font.add(font_name, font_path)
# 修改坐標(biāo)軸和legend、標(biāo)題的字體
theme(text=element_text(family=font_name))
# 修改geom_text的字體
geom_text(family=font_name)系統(tǒng)可用字體
Linux字體一般在
/usr/share/fonts下,也可以使用fc-list列出所以加載的字體。Windows字體在
C:\Windows\Fonts\下,直接可以看到,也可以拷貝到Linux下使用。
合并字體支持中英文
通常情況下,作圖的字體都是英文,ggplot2默認(rèn)的或按需求加載一種字體就可以了。但如果中英文混合出現(xiàn)時(shí),單個(gè)字體只能支持一種文字,最好的方式是合并兩種字體,類似于Word中設(shè)置中英文分別使用不同的字體。
軟件FontForge可以方便的合并中英文字體,其安裝也比較簡(jiǎn)單,直接 yum install fontforge.x86_64。
假如需要合并FZSTK.TTF (windows下獲取)和Schoolbell-Regular.ttf (谷歌下載),這兩個(gè)都是手寫字體。按如下,把字體文件和程序腳本mergefont.pe放在同一目錄下,運(yùn)行fontforge -script mergefont.pe即可獲得合并后的字體FZ_School.ttf。
$ ls
FZSTK.TTF mergefont.pe Schoolbell-Regular.ttf
$ cat mergefont.pe
Open("FZSTK.TTF")
SelectAll()
ScaleToEm(1024)
Generate("temp.ttf", "", 0x14)
Close()
# Open English font and merge to the Chinese font
Open("Schoolbell-Regular.ttf")
SelectAll()
ScaleToEm(1024)
MergeFonts("temp.ttf")
SetFontNames("FZ_School", "FZST", "Schoolbel", "Regular", "")
Generate("FZ_School.ttf", "", 0x14)
Close()
$ fontforge -script mergefont.pe
$ ls
FZ_School.ttf FZSTK.TTF mergefont.pe Schoolbell-Regular.ttf然后安裝前面的介紹使用showtext導(dǎo)入即可使用。
一個(gè)示例
字體文件自己從Windows獲取,School bell從Google fonts獲取。
library(showtext)
## Add fonts that are available on current path
# 方正字體+schoole bell (中英混合)
font.add("FZ_School", "FZ_School.ttf")
# 黑體
font.add("simhei", "simhei.ttf")
font.add("Arial","arial.ttf")
# 黑體和Arial的合體
font.add("HeiArial", "HeiArial.ttf")
showtext.auto() ## automatically use showtext for new devices
library(ggplot2)
p = ggplot(NULL, aes(x = 1:10, y = 2^(1:10), group=1)) + geom_line() +
theme(axis.title.y=element_text(family="Arial"), axis.title.x=element_text(family="HeiArial"),
plot.title=element_text(family="simhei")) +
xlab("Days spent on 生信寶典") +
ylab("Things you have learned") +
ggtitle("生信寶典,換個(gè)角度學(xué)生信") +
annotate("text", 7, 300, family = "FZ_School", size = 8,
label = "收獲曲線 (Harvest curve)", angle=15)
# annotate指定的是文字的中間部分的位置
ggsave(p, filename="example-SXBD.pdf", width = 7, height = 4) ## PDF deviceReference
中英文字體混合:
http://www.voidcn.com/article/p-gnggkwmy-vn.html
改變字體類型:
https://github.com/yixuan/showtext
獲取文件名:
https://stackoverflow.com/questions/29113973/getting-filename-without-extension-in-r
關(guān)注生信寶典,換個(gè)角度學(xué)生信
高顏值免費(fèi)在線繪圖(點(diǎn)擊圖片直達(dá)網(wǎng)站手冊(cè))
往期精品(點(diǎn)擊圖片直達(dá)文字對(duì)應(yīng)教程)
后臺(tái)回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集




























