plt.show() 在 vscode 中无反应,是因为默认后端为非交互式(如 agg),需改用内联模式(%matplotlib inline)或正确配置 gui 后端(如 qt5agg/tkagg),并确保在 import matplotlib.pyplot 之前设置,且使用匹配的 python 解释器和环境。

为什么 plt.show() 在 VSCode 里没反应?
直接运行 plt.show() 却看不到图,不是代码错,而是 VSCode 默认不启用交互式绘图后端。Matplotlib 默认用 Agg 这种“无界面”后端,它能生成图片文件但不弹窗——这在服务器上合理,但在本地开发时就卡住了。
- 检查当前后端:
print(matplotlib.get_backend()),大概率输出Agg或module://matplotlib_inline.backend_inline - VSCode 的 Python 扩展自带 Jupyter 内核支持,真正起作用的是
matplotlib-inline(注意拼写),不是系统级 GUI 后端 - 别急着改
matplotlibrc——硬切Qt5Agg可能报RuntimeError: Invalid display variable,尤其在 WSL 或远程 SSH 场景下
用 VSCode 的 Python Interactive 窗口显示图
这是最稳、最贴合 VSCode 工作流的方式:把绘图代码发到交互式窗口执行,图会内嵌在 notebook 风格的输出区,不依赖系统 GUI。
- 确保已安装
matplotlib和ipykernel(pip install matplotlib ipykernel) - 右键 Python 文件 →
Run Current File in Interactive Window,或选中代码按Shift+Enter - 关键点:必须在代码开头加
%matplotlib inline(Jupyter magic 命令),否则图仍不显示 - 示例最小可运行块:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
plt.title("VSCode Inline Plot")
plt.show()
想弹窗看图?得配对后端和环境
如果非得用 plt.show() 弹出独立窗口(比如调试动画、多图对比),就得让 Matplotlib 走真正的 GUI 后端,但 VSCode 终端本身不转发图形界面。
- Windows/macOS 本地安装:确保装了
PyQt5或PySide2(pip install PyQt5),再加一行matplotlib.use('Qt5Agg')在import matplotlib.pyplot as plt之前 - WSL 用户:不能直接弹窗,需配置 X11 转发(
export DISPLAY=:0+ 安装 X Server),否则必报Cannot connect to "None" - 远程 SSH 连 VSCode:基本不可行——图形界面无法透传,强行设置后端只会卡死或报错
- 替代方案:用
plt.savefig("out.png")保存,然后右键文件资源管理器里打开,比折腾 GUI 更可靠
常见报错和绕过技巧
遇到 FigureCanvasAgg is not a subclass of FigureCanvasBase 或 No module named 'PyQt5',说明后端链断了;而 AttributeError: 'Figure' object has no attribute 'show' 往往是误调用了 fig.show() 而非 plt.show()。
- 别写
plt.show(block=False)试图后台显示——VSCode 终端会立刻退出,图一闪即逝 - 在 Interactive 窗口里,
plt.ion()(交互模式)基本无效,inline后端不支持实时刷新 - 如果图只显示一半或坐标轴错位,试试加
plt.tight_layout(),VSCode inline 渲染对布局敏感 - 导出高清图:用
plt.savefig("plot.png", dpi=300, bbox_inches="tight"),bbox_inches防标题被截
%matplotlib inline 就够了;真需要弹窗交互,优先考虑是否能在系统终端(非 VSCode 内置终端)里跑脚本——那才是 Matplotlib GUI 后端的舒适区。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











