MacOS High Sierra下Matplotlib交互模式绘图无窗口问题求助
解决MacOS High Sierra下matplotlib交互式绘图窗口失踪问题
嘿,我之前也踩过MacOS和matplotlib交互式绘图的坑!针对你在MacOS High Sierra、Python 2.7.14、matplotlib 2.2.2环境里遇到的问题——用plt.ion()后程序坞出现图标但绘图窗口找不到,不用ion()只能生成单张图的情况,给你几个实用的解决办法:
1. 切换matplotlib后端
MacOS默认的MacOSX后端在交互式模式下偶尔会出现窗口隐藏的bug,你可以尝试切换到更稳定的TkAgg后端。在代码最开头添加以下配置:
import matplotlib matplotlib.use('TkAgg') # 强制使用TkAgg后端 import matplotlib.pyplot as plt
之后再运行你的绘图代码:
plt.ion() plt.plot(x,y) plt.show()
这个方法大概率能解决窗口失踪的问题,TkAgg在Python2.7环境下兼容性很好。
2. 强制将绘图窗口前置
如果切换后端后窗口还是“躲”起来了,可以在plt.show()之后添加一行代码,强制把绘图窗口调到最前端:
plt.ion() plt.plot(x,y) plt.show() plt.get_current_fig_manager().window.raise_() # 强制窗口前置
有时候窗口只是被其他应用窗口遮挡或者跑到了后台,这行代码能帮你把它拉出来。
3. 尝试Qt后端(可选)
如果TkAgg还是不行,你可以试试安装Qt相关依赖(Python2.7可支持PyQt4或PyQt5),然后切换到Qt5Agg后端:
import matplotlib matplotlib.use('Qt5Agg') import matplotlib.pyplot as plt
Qt后端在MacOS的交互式绘图场景下稳定性也不错,不过需要先确保你已经安装了对应的PyQt库。
另外补充下:不用plt.ion()时matplotlib是阻塞式绘图,程序会卡在plt.show()直到你关闭窗口,所以只能生成一张图;而plt.ion()开启的是交互式模式,窗口不会阻塞程序运行,这也是你需要它的原因~
内容的提问来源于stack exchange,提问作者Valentyn




