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

**URL:** <https://meta.appinn.net/t/topic/75160>\
**Category:** 讨论分享\
**Tags:** r语言\
**Created:** [2025 年9 月 24 日 14:03 UTC](https://meta.appinn.net/t/topic/75160 "2025-09-24T14:03:06Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![VictoryRoad](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/victoryroad/32/58964_2.png) [@VictoryRoad](https://meta.appinn.net/u/VictoryRoad)\
**Post date:** [2025 年9 月 24 日 14:03 UTC](https://meta.appinn.net/t/topic/75160/1 "2025-09-24T14:03:06Z")

</div>

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

### 1 安装需要的软件包

R shell 中执行如下命令，

```r
install.packages(showtext)

```

### 2 查看当前可用字体

R shell 中执行如下命令，

```r
library(showtext)
font_families()

```

可得到如下形式的输出：

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

```

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

### 3 修改作图代码

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

```r
#!/usr/bin/Rscript

library(ggplot2)

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

```

修改后的代码如下：

```r
#!/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` 格式）放在脚本所在的文件夹中，然后编辑脚本：

```r
#!/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")) #应用自定义字体

```

### 参考资料

- [https://www.jianshu.com/p/770861483781](https://www.jianshu.com/p/770861483781)
