执行时
#!/usr/bin/env python
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.show()
(以及更复杂的例子)我得到了
/usr/local/lib/python3.4/dist-packages/
matplotlib/backends/backend_gtk3.py:215: Warning:
Source ID 7 was not found when attempting to remove it
GLib.source_remove(self._idle_event_id)
导致这种情况的原因是什么?如何摆脱这些警告?
我知道我可以使用
import warnings
warnings.simplefilter("ignore")
摆脱所有警告,但这不是我要求的。我想要警告,但没有来自matplotlib(特别是上面的那个)。
答案 0 :(得分:8)
GLib.source_remove
未成功,因为之前执行的self.close_event()
可能已经完成了这项工作。
This commit应该可以解决您的问题。它是从2月23日开始的。您可以等待下一个版本或手动应用修补程序。
答案 1 :(得分:5)
预先抱歉回答了一个老问题,但是在通过Linux发行版运行的计算机上通过matplotlib
安装Python 3.6.9和pip
之后,我遇到了类似的问题。我的意图是在所述计算机上升级Python之后能够重新运行涉及pyplot
的旧脚本。当脚本运行到完成并提供预期的输出时,我总是收到以下警告:
/home/jefgrailet/.local/lib/python3.6/site-packages/matplotlib/backends/backend_gtk3.py:195: Warning: Source ID 8 was not found when attempting to remove it
GLib.source_remove(self._idle_draw_id)
使用savefig()
中的pyplot
方法(我想show()
方法也会发生类似的问题)。警告中提到的行对应于backend_gtk3.py
中的此方法:
def destroy(self):
#Gtk.DrawingArea.destroy(self)
self.close_event()
if self._idle_draw_id != 0:
GLib.source_remove(self._idle_draw_id)
我查看了matplotlib GitHub,检查是否存在同一脚本的最新版本,或者是否知道此问题,结果发现上述方法的current implementation仅依赖于self.close_event()
指令,即GLib.source_remove()
是不必要的。
因此,我在上面的代码中注释了最后两行并保存了更改。进行了此编辑之后,我可以在没有任何警告的情况下运行脚本。我希望这会帮助遇到类似问题的人们。
答案 2 :(得分:4)
使用plt.close()
来解决此问题。