%matplotlib inline 必须放在 notebook 开头、导入 matplotlib 的紧下方才有效,仅对后续 cell 生效,且每个 kernel 启动后只需执行一次;放错位置、被覆盖或未导入 matplotlib 均导致图表不显示。

图表不显示,大概率不是代码问题,而是内核未正确加载绘图后端或执行顺序不对。
为什么 %matplotlib inline 有时没反应
它只是告诉 IPython 在当前 cell 输出区直接渲染图像,但前提是:① matplotlib 已导入;② 绘图代码在 magic 命令之后执行;③ 没有被后续的 %matplotlib widget 或其他 backend 覆盖。
- 常见错误:把
%matplotlib inline放在 notebook 最后面,前面的绘图 cell 已经执行过,自然不生效 - 另一个坑:用
plt.show()显式调用——在 inline 模式下反而可能重复出图或报错 - 注意兼容性:
%matplotlib inline在 JupyterLab 中默认可用,但在旧版 Jupyter Notebook(如 5.x)中需确保ipykernel和matplotlib版本匹配(建议 ≥3.3)
必须放在哪里才有效
它只对「之后」的 cell 生效,且每个 kernel 启动后只需执行一次。最稳妥的位置是 notebook 开头、导入 matplotlib 的紧下方:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
%matplotlib inline import matplotlib.pyplot as plt import numpy as np <p>x = np.linspace(0, 10, 100) plt.plot(x, np.sin(x)) # 这行会正常显示图像 </p>
- 不要每画一张图都写一遍
%matplotlib inline - 如果重启 kernel 后图表又不显示,说明你漏了这行,而不是代码错了
- 在函数里写
%matplotlib inline是无效的——magic 命令不能出现在函数体或条件分支中
替代方案:什么时候该换 backend
inline 适合静态分析,但交互式探索(比如缩放、拖拽)需要 %matplotlib widget。这时必须先卸载/重装支持包:
pip install ipympl jupyter nbextension enable --py --sys-prefix ipympl
- 启用后,用
%matplotlib widget替代 inline,但要注意:它依赖浏览器支持 WebGL,某些公司内网环境会白屏 - 如果图突然变成空白或报
FigureCanvasAgg is not a subclass of FigureCanvasBase,大概率是 backend 冲突,重启 kernel 并确认只调用了一次 magic 命令 - 导出 HTML 时,
widget渲染的图不会保留交互能力,而inline输出的是静态 PNG,更可靠
真正容易被忽略的点:Jupyter 的输出缓存机制会让旧图“残留”,看似没刷新。遇到疑似不显示,先检查右上角 kernel 状态是否为 idle,再按 Ctrl+M .(中断 kernel)+ Ctrl+M r(重启),然后从头跑 —— 别跳过 %matplotlib inline 那行。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










