r内核需手动注册至jupyter才能被vscode识别;运行irkernel::installspec()并执行jupyter kernelspec list验证,成功后重启vscode即可在内核选择中看到r选项。

确认R内核是否已注册到Jupyter
VSCode的Jupyter扩展不会自动识别系统安装的R,必须先让Jupyter本身“知道”R是一个可用内核。常见错误是点击“选择内核”后只看到python3,完全不见R选项——这说明R内核尚未注册。
在终端中运行以下命令验证:
irkernel::installspec(user = TRUE, name = 'ir', displayname = 'R 4.3+')
注意:ir 是内核名(不能含空格),R 4.3+ 是你在VSCode里看到的显示名称。若报错提示找不到 irkernel,需先运行:
install.packages("IRkernel")IRkernel::installspec()
成功后,jupyter kernelspec list 应输出包含 ir 的一行。此时重启VSCode,再打开 .ipynb 文件,“选择内核”才能看到R选项。
ggplot2绘图不显示或报错device not found
在macOS或Linux上,R内核默认使用X11或quartz设备,而VSCode Jupyter后端无法接管这些图形窗口,导致ggplot2调用print()后空白、卡住,或报错unable to start device 'quartz'。
解决方案是强制切换到Cairo后端:
- 在Notebook第一个单元格运行:
options(bitmapType = "cairo") - 确保已安装
Cairo包:install.packages("Cairo") - 绘图时显式指定设备:
ggsave("plot.png", plot = p, device = "cairo_pdf")或直接用png()/pdf()设备包裹
不要依赖quartz()或X11(),它们在Jupyter沙箱环境中不可用。
中文标签/坐标轴文字显示为方块
这是字体缺失问题,不是编码问题。R内核默认找不到支持中文的字体,ggplot2或基础plot()会把汉字渲染成方框。
解决路径分两步:
- 在R中设置系统级字体:运行
library(showtext); showtext_auto()(需先install.packages("showtext")) - 或更轻量的方式:在绘图前加载中文字体,例如 macOS 上:
par(family = "Heiti SC");Linux 可用"WenQuanYi Micro Hei";Windows 用"SimHei"
注意:showtext 对 ggsave() 支持良好,但对交互式Jupyter输出有时延迟一帧,首次绘图可多执行一次print(p)触发重绘。
为什么用Jupyter R内核比R Terminal更难出图
因为Jupyter内核运行在无头(headless)模式下,所有图形设备都受限于服务器环境能力。R Terminal直连本地GUI,能自由调用quartz/X11;而Jupyter扩展通过HTTP通信,只能接收PNG/SVG等静态图像流。
这意味着:
-
plot()默认不弹窗,必须显式调用print()或dev.print() -
shiny、plotly::ggplotly()等交互式图表无法在Jupyter单元格中运行(会报错no running R session) - 大尺寸图建议用
ggsave(width = 10, height = 6, dpi = 150)控制输出质量,避免Jupyter渲染模糊
真正容易被忽略的是:每次更换R版本或重装R,IRkernel::installspec() 都要重新运行——它绑定的是具体R二进制路径,不是全局环境。











