【问题标题】:Showing a few figures without stopping calculations in matplotlib在 matplotlib 中显示一些数字而不停止计算
【发布时间】:2016-08-18 11:17:44
【问题描述】:

您好,我想在不停止计算的情况下在 matplotlib 中显示一些数字。我希望在计算完成后立即显示该数字:

import numpy as np
import pylab as py

x=np.linspace(0,50,51)
y=x
fig, axs = plt.subplots(1, 1)
cs = axs.plot(x, y)

现在我想在不妨碍进行其他一些计算的情况下显示情节

plt.show(block=False)
plt.pause(5)

我创建了第二个情节

y1=2*x
fig1, axs1 = plt.subplots(1, 1)
cs1 = axs1.plot(x, y1)

plt.show()

这可行,但是第一次冻结(在我添加的 5 秒暂停之后)直到我最后调用 plt.show()。至关重要的是,第一个数字显示和工作,然后在计算后添加另一个数字。

【问题讨论】:

  • 我在github.com/matplotlib/matplotlib/issues/2134efire 的评论中找到了这个主题的一些旧答案。基本上他说,当进行计算时,数字将冻结,对此无能为力。必须停止计算才能使用该图。也许从那以后发生了一些变化?

标签: python c++ matplotlib


【解决方案1】:

下面的代码应该做你想做的事。我是在 IPython Notebook 中完成的。

from IPython import display
import matplotlib.pyplot as plt

def stream_plot(iterable, plotlife=10.):

        for I in iterable:
            display.clear_output(wait=True)
            output = do_calculations_on_i(I)
            plt.plot(output)
            display.display(plt.gca());
            time.sleep(plotlife); #how long to show the plot for

wait=True 将等待清除旧图,直到它有新的要绘制的内容或打印任何其他输出。

我把睡眠放在那里,这样我就可以在每个情节被抹去之前观察它。这对于必须观察多个实体的分布很有用。您可能需要也可能不需要它来完成您想做的事情。

【讨论】:

  • 感谢您的回复。此代码是否对某些 I 进行计算并停止计算以显示其他 10 秒的绘图?
  • @Revist,是的。如果您的计算花费的时间足够长,您就不需要休眠(暂停)循环操作。我错过了您想要将数字添加到上一个数字的观点。你能提供更多关于你的任务的背景吗?在不知道的情况下,您可以将输出放入某个列表中,并在每次迭代时从该列表中重新绘制。
猜你喜欢
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多