在某些时候,需要在 R 画图中添加中文,但是默认情况下,R 对中文的支持不好。
方案1- showtext
这里推荐一个showtext的 R 包。如果需要将含有中文字体的图形保存为 pdf 文件,可以使用下面讲到的方案,最新版的showtext已经支持了ggplot2,推荐使用此种方案。
这样,在你写的 R 代码中,开头添加:
library(showtext)
showtext_auto(enable=True) # 表示之后用上同样的字体
font_add("kaishu", "simkai.ttf") # 如果系统已经安装了该字体,可以通过这种方式调用
font_add('SimSun', regular = '/Library/Fonts/Microsoft/SimSun.ttf') # 添加字体, 必须给定指定的字体的位置
#如果你使用的是 Mac,可以打开 font book,查找你想要字体的位置。如 SimSun 字对应于 /Library/Fonts/Microsoft/SimSun.ttf 文件。
#如果你使用的是 Linux,字体应该位于 /usr/share/fonts 目录下。
#例子
server-bash@ecs-steven 22:23:35 /home/shenweiyan
$ fc-list |grep SimSun
/usr/share/fonts/chinese/simsun.ttc: NSimSun,新宋体:style=Regular
/usr/share/fonts/chinese/simsun.ttc: SimSun,宋体:style=Regular
使用 showtext 包在绘图钟显示中英文
library(showtext)
showtext_auto(enable=True)
font_add('SimSun', "simsun.ttc")
set.seed(123)
## For now we are using a device functions to draw axis labels
plot(1, xlim = c(-3, 3), ylim = c(-3, 3), type = "n")
## Then turn showtext on and draw some characters
showtext_begin()
text(runif(100, -3, 3), runif(100, -3, 3),
intToUtf8(round(runif(100, 20200, 30000)), multiple=TRUE),
col=rgb(runif(100), runif(100), runif(100), 0.5 + runif(100)/2),
cex=2, family="SimSun")
title("随机汉字", family="SimSun")
showtext_end()
方案2-Cairo
这个专门出pdf以及渲染pdf的包就不过多介绍了,直接看代码
library(Cairo)
CairoPDF()
plot(1:10,1:10,type="n")
text(2,10,"宋体",family="SimSun")
text(2,8,"黑体",family="SimHei")
text(2,6,"楷体",family="KaiTi_GB2312")
text(2,4,"隶书",family="LiSu");
text(2,2,"幼圆",family="YouYuan")
text(6,10,"Arial",family="Arial")
text(6,8,"Times New Roman",family="Times New Roman")
text(6,6,"Courier New",family="Courier New")
text(6,4,"Consolas",family="Consolas")
text(6,2,"Symbol",family="Symbol")
dev.off()
参考链接:中英文字体解决