更新SLOW循环中的实时绘图,而不会使绘图变灰

时间:2016-03-03 17:21:01

标签: python matplotlib plot

有时,我会对循环中的情节进行实时更新。通常情况下,这样可以正常工作,但是当循环内的处理需要很长时间时,除了此时间的前10秒以外,情节都会显示为“睡眠”/“睡眠”。这可能非常烦人,因为它通常无法区分曲线(我当然可以使用虚线,但......)。我正在使用Ubuntu,大约10秒是我开始发生这种情况的门槛。

下面是一些重现问题的玩具代码,以及一些用于演示会发生什么的图片。

是否有一种简单的方法可以防止这种情况发生并导致'行为?

import numpy as np
import pylab as p
import time

def create_data(i):
    time.sleep(10)  # INCREASE THIS VALUE TO MAKE THE PLOT GREY OUT WHILE IT WAITS
    return np.sin(np.arange(i) * 0.1)

def live_plot(y):
    p.cla()
    p.plot(y)
    p.plot(y**2)
    p.draw()
    p.pause(0.01)

for i in xrange(1000):
    y = create_data(i)
    live_plot(y)

enter image description here

2 个答案:

答案 0 :(得分:0)

问题是GUI窗口从窗口管理器的PoV变为无响应,所以它“帮助”灰色显示它告诉你。 gnome / unity中可能有一个设置(不确定您使用的是什么)来禁用它。 (系统依赖,可能不可能:()

一种解决方案是将计算推送到另一个线程/进程,这将允许您使用阻塞show来保持GUI主循环响应。 (复杂:()

另一个解决方案是在慢速循环中定期戳GUI循环。我认为调用fig.canvas.flush_events()就足够了。 (脏:()

简而言之,GUI(以及一般的异步内容)很难做到。

答案 1 :(得分:0)

在Ubuntu 18.04中,转到“搜索程序”,然后在搜索框中键入“ compiz”。当ccsm窗口出现时,查找并取消选中“淡入窗口”框。