如何让Mac版的R绘图支持中文?

如何让Mac版的R绘图支持中文?

初次使用Mac版的R的时候我就遇到了这个问题,Mac版本的R绘图不支持中文(当然是指使用默认配置)!这就非常不方便了,所以很有必要修正这个问题,之前也找到了一套解放方案,不过每次绘图的时候都要设置字体,非常不方便。借鉴之前解决matplolib包中文问题的方案。这次还是决定从源码修改使之支持中文。

首先是之前的解决方案:

1
2
3
4
5
6
7
8
9
10
## 下面的字体名字可以打开字体册查看
### 宋体-简
plot(1:10,family="STSongti-SC-Regular",main="你好")
### 楷书-简
plot(1:10,family="STKaitiSC-Regular",main="你好")
plot(1:10,family="STKaiti",main="你好")
### 另外:罗马字
plot(1:10,family="TimesNewRomanPSMT",main="Hello")
### 用户自定义字体
plot(1:10,family="BringHeart-Regular",main="Hello")

查看字体名称的方法如下:

不过这个是plot函数是一个系统函数,没找到修改的办法,不过我觉得可以新建一个plot函数,这个函数处理family参数的默认值是自己设置的,其它的参数和原来的plot函数都一样,这样就实现了override。不过想起来就不容易,所以我还没尝试。
但是另外一个东西是很容易修改的,就是ggplot2包。

解决ggplot2包的中文问题

ggplot2包的中文问题可以用如下的方式解决:

1
2
3
library(ggplot2)
p<-ggplot(diamonds, aes(x = carat, y = depth))
p+geom_point()+labs(title="钻石") + theme(text = element_text(family = 'STSongti-SC-Regular'))


但是每次都要加theme(text = element_text(family = 'STSongti-SC-Regular'))不也是非常痛苦的事情嘛!所以就去改源代码吧!
最开始我的想法是去R的系统文件夹找到这个包改源代码:
运行下面的命令即可查看系统文件夹的路径:

1
2
> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/3.5/Resources/library"

然后我按照这个路径打开ggplot2包,结果傻眼了:

这三个文件用Sublime text之后都没有看到任何像自己想要的东西。于是这条路只得放弃。

建立自己的ggplot2包

既然R安装的包都是经过编译过的,那就意味着我想解决问题只有从未被编译过的包入手,我首先从github上下载了一个ggplot2包,然后找到了四个可能的函数:

1
2
3
4
theme-current.R
theme-defaults.r
theme-elements.r
theme.r

经过一番研究,我发现只要把base_family = ""都设置为base_family = "STSongti-SC-Regular"、然后再把其它的涉及字体的地方都修改一下就好了。修改之后我把包上传到了自己的github上,运行下面的命令即可安装我的ggplot2包:

1
devtools::install_github("czxa/ggplot2")

测试一下:

1
2
3
library(ggplot2)
p<-ggplot(diamonds, aes(x = carat, y = depth))
p+geom_point()+labs(title="钻石")

修改ggplot主题包ggthemes

上面我只修改了ggplot2的默认主题,所以如果使用其它包的ggplot2主题会导致中文依然无法直接使用。所以作为一次尝试,我修改了ggthemes包。修改方法依然是把所有的字体默认设置为STSongti-SC-Regular
例如使用这个包里面的highcharts主题测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
library("ggplot2")
library("ggthemes")
dtemp <- data.frame(months = factor(rep(substr(month.name,1,3), 4), levels = substr(month.name,1,3)),
city = rep(c("Tokyo", "New York", "Berlin", "London"), each = 12),
temp = c(7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6,
-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5,
-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0,
3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8))
ggplot(dtemp, aes(x = months, y = temp, group = city, color = city)) +
geom_line() +
geom_point(size = 1.1) +
ggtitle("中文测试") +
theme_hc() +
scale_colour_hc()


我一一测试了这个包中的所有主题,都可以直接使用中文了。安装这个包:

1
devtools::install_github("czxa/ggthemes")

自己还是得好好学ggplot2啊!今天发现了很多好的资源,ggplot2像是一个生态体系。我的书书架上提供了一些ggplot2的书籍,例如《ggplot2:数据分析与图形艺术》

# R

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×