【问题标题】:Updating matplotlib plot during code execution在代码执行期间更新 matplotlib 图
【发布时间】:2016-10-03 14:54:40
【问题描述】:

我发现 python/matplotlib 的最新更新破坏了一个关键特性,即在代码执行期间定期更新或“刷新”matplotlib 图的能力。下面是一个最低限度(非)工作的例子。

import numpy as np
from matplotlib.pyplot import *
from time import sleep

x = np.array([0])
y = np.array([0])

figure()
for i in range(51):
    gca().cla()
    plot(x,y)
    xlim([0,50])
    ylim([0,2500])
    draw()
    show(block = False)
    x = np.append(x,[x[-1]+1])
    y = np.append(y,[x[-1]**2])
    sleep(0.01)

如果我使用 Python 3.4.3 和 matplotlib 1.4.3 运行这个程序,我可以看到绘图不断更新,并且曲线随着程序运行而增长。但是,使用 Python 3.5.1 和 matplotlib 1.5.3,matplotlib 窗口打开但不显示绘图。相反,它不断显示窗口“没有响应”,并且仅在代码执行完成时才显示最终的绘图。

对此我能做些什么?有什么方法可以使用最新版本实现我想要的功能?

注意:如果有什么不同,我会在默认的 IDLE 环境中运行它。

【问题讨论】:

  • 您是否在导入之间尝试过这条线:% matplotlib inline
  • @estebanpdl 在我看来,该命令旨在用于 ipython 以强制绘图出现在命令窗口内。我认为这不是我想要的。

标签: python matplotlib plot


【解决方案1】:

这很有趣。我习惯于绘制交互式绘图有点不同:

import numpy as np
import matplotlib.pyplot as plt
from time import sleep

x = np.array([0])
y = np.array([0])

plt.ion()
fig = plt.figure()
ax=fig.add_subplot(111)
ax.set_xlim([0,50])
ax.set_ylim([0,2500])
line,  = ax.plot(x,y)
plt.show()
for i in range(51):
    x = np.append(x,[x[-1]+1])
    y = np.append(y,[x[-1]**2])
    line.set_data(x,y)
    plt.pause(0.01)

您(或任何人)能否检查这是否在 Matplotlib 1.5 中显示相同的问题?

【讨论】:

  • 是的,这在 1.4 中也适用于我。我最后拥有的show 并不是绝对必要的,它只是真正需要的draw 命令,但我保留它,因为它不会伤害任何东西。唯一的另一个区别是ion,我发现它并没有真正起到任何帮助。
  • 问题是,如果它在 Matplotlib 1.5 中工作?!
  • @FelixXu 只有在你之前忘记输入plt.ion() 时才会发生这种情况。
猜你喜欢
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
相关资源
最近更新 更多