关于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操作系统字符集,或许可以,未测;若有人成功,请给出方案
上一篇: mysql省市区脚本