今天,我把matplotlib升级到2.0.2版本,之前可能有3年没有升级了。在
现在我有个问题,在交互式绘图中,窗口总是在前面,好像这里make matplotlib plotting window pop up as the active one已经成为默认行为。在
如何停用它?我不希望窗口每5秒出现在我的文本编辑器,浏览器。。。在
我希望它保持在我放置它的z顺序中,不管是在活动窗口的前面还是后面。在
我认为,2016年1月31日的以下提交是造成这一问题的原因:tkagg: raise each new window; partially addresses #596
在Github上找到相关注释https://github.com/matplotlib/matplotlib/issues/596#issuecomment-305298577
似乎是我对plt.pause
的调用引起了这个问题,而不是plt.plot
调用。在
更改后端
此问题似乎仅在使用
Tk
后端时出现。使用Qt
后端,当使用plt.pause
更新时,窗口将保持在原来的位置。在要更改后端,请在脚本开头使用这些行。在
修改
plt.pause
如果更改后端不是一个选项,那么下面的方法可能会有所帮助。窗口不断弹出到前面的原因来自于
^{pr2}$plt.pause
内部调用plt.show()
。因此,您实现了自己的pause
函数,而不调用show
。这要求首先处于交互模式plt.ion()
,然后至少调用plt.show()
。然后,您可以使用如下所示的自定义mypause
函数更新绘图。在使用
animation
。最后,使用
matplotlib.animation
类将使上述所有内容过时。一个matplotlib.animation.FuncAnimation
的例子显示了on the matplotlib page。在现在是2019年4月,Matplotlib 3.0.3的mypause()函数(从最新的pyplot实现中复制)应该更像
经过一些测试(Qt5 backend/Spyder/Windows 7 64bit)后,对我来说有帮助的调用是:
^{pr2}$无花果是你的图形对象。在我的情况下,两种方法都不起作用。根据animation文档,这本质上就是FuncAnimation所做的。在
我在Mac上也遇到了同样的问题。我不确定这是否是最好的方法,但是我没有使用
plt.pause(0.001)
,而是改为fig.canvas.start_event_loop(0.001)
来更新动画中的每一帧。这样可以使窗口保持在后台。在相关问题 更多 >
编程相关推荐