关于R在Linux服务器上生成图片中文乱码原因及解决办法

乱码原因:

    主要是因为Linux没有对应字体库导致。Linux本身自带字体库(具体有啥,暂不深究),但不包含windows上的,尤其像“微软雅 黑”这样的字体库(主因应该是版权问题);所以在Windows开发R程序,在设置字体后(如“宋体”、“黑体”、“微软雅黑”),在Linux上是无法 显示的。

解决办法:

    以CentOS为例,其他版本请自行对照相应路径

1. 在/usr/share/fonts下新建一个微软字体文件夹,如msfonts

2. 将windows系统盘下fonts中的MSYHBD.TTF 、MSYH.TTF 、simhei.ttf 、simsun.ttc 拷贝到linux上步骤1新建的文件夹/usr/share/fonts/msfonts下

3. 修改/etc/fonts/fonts.conf,在<dir>/usr/share/fonts</dir>后增加<dir>/usr/share/fonts/msfonts</dir>,如下

<!-- Font directory list -->
    <dir>/usr/share/fonts</dir>
    <dir>/usr/share/fonts/msfonts</dir>
    <dir>/usr/share/X11/fonts/Type1</dir> <dir>/usr/share/X11/fonts/OTF</dir>
    <dir>~/.fonts</dir>

4. 执行fc-cache -f 使得新加的字体立即生效。

5. 修改R程序,在加载Cairo后,设置字体

# 加载Cairo库
library(Cairo)
# 设置字体
CairoFonts(regular = "宋体:style=Regular", bold="微软雅黑:style=Regular")
# 其他画图代码,balabala...

 经测试,只设置第一个参数regular 不起作用,使用的是第二个参数bold的设置,原因不明;其中冒号“:”分隔符后边的style表示使用的样式,Regular正常 Bold粗体

关于字体大小是在CairoPNG函数中的pointsize参数设置

CairoPNG(filename = "Rplot.png", width = 480, height = 480, pointsize = 12, bg = "white", res = NA, ...)

最后附上Cairo API。

另外再补充一句:关于windows上使用UTF-8字符集乱码问题,如果系统默认是GBK字符集,这个问题应该 无解,原因是R运行时环境无法指定字符集。除非用icon函数进行转码,但是这样写的代码没法跨平台执行了。至于更改windows操作系统字符集,或许可以,未测;若有人成功,请给出方案

猜你喜欢

转载自vase.iteye.com/blog/2099226