R 学习 - 图形设置中英字体
微信公眾號:http://mp.weixin.qq.com/s/NAwyvtTS7t5rRU7KKBwHTA
繪制生信寶典調查總結文中的柱狀圖時,出現了中文亂碼,就搜索了下解決方案,記錄如下。
修改圖形的字體
ggplot2中修改圖形字體。
# 修改坐標軸和legend、標題的字體 theme(text=element_text(family="Arial")) # 或者 theme_bw(base_family="Arial")# 修改geom_text的字體 geom_text(family="Arial")ggplot2支持中文字體輸出PDF
showtext包可給定字體文件,加載到R環境中,生成新的字體家族名字,后期調用這個名字設定字體,并且支持中文寫入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)# 修改坐標軸和legend、標題的字體 theme(text=element_text(family=font_name))# 修改geom_text的字體 geom_text(family=font_name)系統可用字體
Linux字體一般在 /usr/share/fonts下,也可以使用fc-list列出所以加載的字體。
Windows字體在 C:\Windows\Fonts\下,直接可以看到,也可以拷貝到Linux下使用。
合并字體支持中英文
通常情況下,作圖的字體都是英文,ggplot2默認的或按需求加載一種字體就可以了。但如果中英文混合出現時,單個字體只能支持一種文字,最好的方式是合并兩種字體,類似于Word中設置中英文分別使用不同的字體。
軟件FontForge可以方便的合并中英文字體,其安裝也比較簡單,直接 yum install fontforge.x86_64。
假如需要合并FZSTK.TTF (windows下獲取)和Schoolbell-Regular.ttf (谷歌下載),這兩個都是手寫字體。按如下,把字體文件和程序腳本mergefont.pe放在同一目錄下,運行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導入即可使用。
一個示例
字體文件自己從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 deviceslibrary(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("生信寶典,換個角度學生信") + 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
生信寶典,換個角度學生信
- R語言學習 - 圖形設置中英字體
總結
以上是生活随笔為你收集整理的R 学习 - 图形设置中英字体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 太赞了!这款神器一定要有!在Touch
- 下一篇: A/D采样控制电路设计---VHDL