Notebook中plt.show()无反应是因Jupyter默认不依赖弹窗而需内联渲染;应运行%matplotlib inline或配置c.InteractiveShellApp.matplotlib = 'inline',并避免手动切换后端。

为什么Notebook里plt.show()没反应,但代码不报错
VSCode的Notebook(.ipynb)默认使用Jupyter内核,它本身不依赖plt.show()弹窗,而是靠后端自动捕获绘图对象并嵌入输出区域。如果你写了plt.show()却只看到空白或<figure size ...></figure>文本,说明当前后端没启用内联渲染(inline),或者被其他配置覆盖了。
- 检查是否启用了
matplotlib-inline扩展:在Notebook单元格顶部运行%matplotlib inline,这是最直接生效的方式 - 若已运行仍无效,大概率是内核未加载该魔法命令——重启内核(右上角「Restart Kernel」)后再试
- 不要在Notebook中用
plt.switch_backend('TkAgg')之类手动切后端,这会和Jupyter的nbAgg冲突,导致图像消失
如何让每个Notebook单元都自动启用内联绘图
每次手动敲%matplotlib inline太麻烦,可以全局配置。VSCode Notebook读取的是Jupyter的配置,不是matplotlib的matplotlibrc文件。
- 在终端中执行:
jupyter notebook --generate-config(如果还没生成过jupyter_config.py) - 打开配置文件(路径类似
~/.jupyter/jupyter_notebook_config.py),添加一行:c.InteractiveShellApp.matplotlib = 'inline' - 重启VSCode或重新连接Notebook内核,之后所有新单元都会默认内联渲染
- 注意:这个设置对纯Python脚本(
.py)无效,只影响.ipynb
图像模糊、分辨率低或中文显示为方块怎么办
Notebook内联输出用的是PNG,默认DPI偏低,且不自动加载中文字体。这不是VSCode特有问题,而是Jupyter+matplotlib组合的常见表现。
- 提升清晰度:在第一个单元运行
%config InlineBackend.figure_format = 'retina'(macOS)或'svg'(通用,矢量图更清晰) - 解决中文乱码:在Notebook开头加两行(必须在首次绘图前):
import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['DejaVu Sans', 'Arial Unicode MS', 'SimHei'] - 避免用
plt.rcParams.update(...)在中间单元修改字体,容易被后续单元重置
远程SSH连接Notebook时图像不显示
你在本地VSCode连远程Linux服务器跑Notebook,但图表出不来——这不是后端问题,而是Jupyter服务端没开图形支持,或VSCode没走对通道。
- 确认远程服务器已安装
matplotlib和ipykernel,且没设环境变量MPLBACKEND=Agg - 不要用
ssh -X转发X11,Notebook走的是HTTP协议,X11完全无关;正确做法是确保远程Jupyter服务监听--ip=0.0.0.0且防火墙放行端口 - VSCode Remote-SSH连接后,打开Notebook时右下角应显示「Jupyter Server: Local」或「Remote」,若显示「Not connected」,需点击手动选择服务器
- 极少数情况是远程没装
tkinter,导致Agg后端成为唯一选项——此时只能改用svg输出格式,而非硬要弹窗
.py与.ipynb调试方式」。


















