让 ggplot 正常显示汉字的一种方法

默认情况下,R 语言的作图工具包 ggplot2 使用的字体不包含中文,无法显示汉字。如果你的图表中包含中文字符,它们大概率会变成方块(甚至希腊字母也会)。可通过如下方法使汉字得以正确显示。

1 安装需要的软件包

R shell 中执行如下命令,

install.packages(showtext)

2 查看当前可用字体

R shell 中执行如下命令,

library(showtext)
font_families()

可得到如下形式的输出:

[1] "sans"         "serif"        "mono"         "wqy-microhei"

一般而言,Ubuntu 系统中包含中文字体 “wqy-microhei”,我们直接用它即可。

3 修改作图代码

以下面这个脚本为例,原始代码中没有包含修改字体的指令,使用的是默认的、不支持中文的字体。

#!/usr/bin/Rscript

library(ggplot2)

mydata1 <- read.csv('mydata1.csv')
ggplot(mydata1, aes(x = TOC)) + geom_density(aes(color=grp))

修改后的代码如下:

#!/usr/bin/Rscript

library(ggplot2)
library(showtext) #加载 showtext 程序包
showtext_auto() #让脚本自动处理汉字

mydata1 <- read.csv('mydata1.csv')
ggplot(mydata1, aes(x = TOC)) + geom_density(aes(color=grp)) + theme(text = element_text(family = "wqy-microhei")) #+ theme(text =...) 是修改绘图过程中的全局字体设置。

附:使用自己的字体

如果系统中没有中文字体,我们还可以修改作图脚本、加载自定义字体。

首先将字体文件(.ttf 格式)放在脚本所在的文件夹中,然后编辑脚本:

#!/usr/bin/Rscript

library(ggplot2)
library(showtext)
font_add("myfont", "myfont.ttf") #加载自定义字体,第一个参数为字体名称,第二个参数为字体文件的名称。
showtext_auto()

mydata1 <- read.csv('mydata1.csv')
ggplot(mydata1, aes(x = TOC)) + geom_density(aes(color=grp)) + theme(text = element_text(family = "myfont")) #应用自定义字体

参考资料

3 个赞