MacBook Pro升级后Jupyter中Matplotlib交互式绘图无法弹出独立窗口
解决Jupyter Notebook中Matplotlib执行
%matplotlib后报错及无法绘图的问题 问题背景
你在从2015款MacBook Pro迁移到2017款、系统从macOS Sierra升级到High Sierra后,通过Time Machine恢复数据,出现Matplotlib异常:
- 直接运行
plt.plot(range(10))+plt.show()能正常内嵌显示绘图 - 执行
%matplotlib后,终端抛出AttributeError: 'function' object has no attribute 'mainloop'错误,后续绘图无法显示
这个问题本质是旧环境迁移后,Matplotlib的MacOSX后端与新系统、新版Jupyter/ipykernel的兼容性冲突,以下是几个针对性解决方案:
解决方案1:强制使用Inline后端(最快见效)
Jupyter Notebook的inline后端专门用于内嵌显示绘图,完全不需要调用系统GUI循环,能直接绕过MacOSX后端的兼容性问题:
在Notebook中直接执行:
%matplotlib inline之后再运行
plt.plot(range(10))+plt.show()就能正常显示。如果想默认启用inline后端,避免每次手动输入:
- 生成Jupyter配置文件(如果还没有):
jupyter notebook --generate-config - 打开
~/.jupyter/jupyter_notebook_config.py,添加以下配置:c.IPKernelApp.matplotlib = 'inline' - 重启Jupyter Notebook即可生效。
- 生成Jupyter配置文件(如果还没有):
解决方案2:更新Matplotlib到兼容版本
Time Machine恢复的旧版Matplotlib可能不适配High Sierra系统框架,通过conda更新到最新兼容版本:
- 关闭所有Jupyter进程,打开终端执行:
conda update matplotlib - 更新完成后,重启Jupyter Notebook,测试
%matplotlib命令,此时MacOSX后端应该能正常工作。
如果更新后仍有问题,可以尝试切换到Qt5Agg后端(需要先安装pyqt5):
conda install pyqt5
然后在Notebook中执行:
import matplotlib matplotlib.use('Qt5Agg') import matplotlib.pyplot as plt %matplotlib plt.plot(range(10)) plt.show()
解决方案3:重置Matplotlib配置文件
Time Machine恢复的旧配置文件可能残留与新系统冲突的设置,删除后让Matplotlib生成新配置:
- 关闭Jupyter,终端执行:
rm ~/.matplotlib/matplotlibrc rm -rf ~/.matplotlib/cache - 重启Jupyter Notebook,Matplotlib会自动生成适配当前系统的新配置,再测试
%matplotlib和绘图功能。
内容的提问来源于stack exchange,提问作者jkhadka
相关产品推荐
相关产品推荐

