gpt4 book ai didi

python - 强制即时更新 matplotlib 图

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:43 26 4
gpt4 key购买 nike

我在 matplotlib 中有一个散点图,上面有一个 onpick() 操作,如下面的 MWE 所示。

Whenever a point is selected, I run a computation on that point, that takes about 30 seconds.我想通过在图中的同一点上画一个红色圆圈来通知用户,只要用户点击它。

以下 MWE 有效,但它仅在 30 秒后绘制红色圆圈:

from numpy import take
from numpy.random import randn
from time import sleep
import matplotlib.pylab as plt

fig, ax = plt.subplots()
X, Y = randn(2, 10)
ax.scatter(X, Y, picker=True)
def onpick(event):
ax.scatter(take(X, event.ind), take(Y, event.ind), s=40, facecolors='none', edgecolors='red')
fig.canvas.draw()
sleep(30)#here I have MyLongComputation() in my code

fig.canvas.mpl_connect('pick_event', onpick)
plt.show()

有没有办法请求立即生效的图形绘制操作?以防万一,我以交互模式从 Ipython 调用文件。

请注意,我对 fig.canvas.draw() 的调用不会被 matplotlib 忽略,而只会推迟到 onpick() 返回时。

最佳答案

隐藏的主循环只在更新情节之间运行,您需要以让 GUI 继续工作的方式开始您的长时间计算,这可以是:

  • 在一个单独的线程中,(参见 python 线程模块),
  • 作为外部进程,(参见子进程模块),
  • 在其他内核上使用 multiprocessing ,
  • 作为外部对象,可能在远程服务器上,使用 pyro , mpi4py , 或 celery在非阻塞模式下,注意服务器可以在同一台机器上。

然后当它通知它已完成显示结果时。好消息是,您可以对结果请求进行排队,这样您的用户就可以点击几个点(每个点都立即突出显示)、去吃午饭或可能去度周末。

请注意 python 中的 sleep block 。

关于python - 强制即时更新 matplotlib 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com