R绘图编码异常:Windows迁移Linux后R脚本运行问题求助
解决Linux下R脚本绘图编码异常的思路
我之前跨系统迁移R脚本时也碰到过一模一样的问题,Windows和Linux的编码、字体环境差异确实容易踩坑,给你几个亲测有效的解决方向:
1. 统一R的系统编码设置
Windows默认用GBK/GB2312编码,而Linux通用UTF-8,这是核心矛盾之一。你可以在脚本开头强制设置R的locale为UTF-8:
# 设置中文UTF-8编码 Sys.setlocale(category = "LC_ALL", locale = "zh_CN.UTF-8")
如果执行时报错说找不到该locale,先在Linux终端检查系统是否安装了中文locale:
locale -a
如果没有zh_CN.UTF-8,先安装对应语言包:
- Debian/Ubuntu系:
sudo apt install language-pack-zh-hans - CentOS/RHEL系:
sudo yum install glibc-langpack-zh
安装后重新设置locale即可。
2. 为绘图指定可用的中文字体
Linux默认没有Windows的宋体、黑体等字体,绘图时找不到对应字体就会出现乱码/方块。推荐用showtext包来加载系统中的中文字体,步骤如下:
# 安装并加载showtext包 install.packages("showtext") library(showtext) # 加载系统中的中文字体(以Noto Sans CJK为例,这是Linux常用的开源中文字体) # 如果没装Noto字体,先在终端执行:sudo apt install fonts-noto-cjk(Debian/Ubuntu) font_add("noto", "NotoSansCJKsc-Regular.otf") # 开启自动字体替换 showtext_auto() # 之后正常执行你的绘图代码即可 plot(1:10, main = "测试中文标题")
如果你的系统里有其他中文字体(比如从Windows复制的simhei.ttf),也可以直接指定字体文件路径。
3. 确保脚本文件本身的编码正确
如果你的R脚本是在Windows下保存的,编码大概率是GBK,Linux下R默认用UTF-8读取就会乱码。解决方式二选一:
- 读取脚本时指定编码:
source("your_script.R", encoding = "GBK") - 把脚本转成UTF-8编码:用VS Code、Sublime等编辑器打开脚本,右下角切换编码为UTF-8后保存;或者用终端命令转换:
iconv -f GBK -t UTF-8 your_script.R > your_script_utf8.R
4. 针对HTML输出的额外检查
你提到HTML标题正常但绘图异常,说明页面编码已经设对,但绘图是生成的图片,还是受字体和R编码影响。除了上面的步骤,如果你用rmarkdown生成HTML,建议在YAML头部明确指定编码:
--- title: "正常显示的标题" output: html_document encoding: UTF-8 ---
同时确保绘图代码前已经加载了showtext并设置好字体。
快速排查小技巧
- 用
Sys.getlocale()查看当前R的编码设置,确认是否是UTF-8 - 用
font_families()查看showtext加载的字体列表,确保目标字体存在 - 用
sessionInfo()查看R的环境信息,确认语言包是否正常加载
内容的提问来源于stack exchange,提问作者Nolwenn35
相关产品推荐
相关产品推荐

