You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动