【问题标题】:How to plot incomplete data with matplotlib如何使用 matplotlib 绘制不完整的数据
【发布时间】:2016-07-13 18:16:11
【问题描述】:

我正在做一些处理,我想绘制进度。我知道我的总运行次数,我计算每 100 次运行的结果,并且我想每次都生成一个新图。所以,我的代码看起来像这样

开始 = time.time() 速度 = [] 对于范围内的步骤(步骤): do_my_stuff() 如果步骤 % 100 == 0: speed.append((step + 1) / (time.time() - start)) x = np.arrange(步骤) y = np.array(速度) plt.plot(x, y, 'ro')

当然,我得到“x 和 y 必须具有相同的第一维”错误。这似乎是一个简单而常见的问题,但由于某种原因,我找不到现成的解决方案。我可能没有在谷歌上搜索正确的东西。我错过了什么?

更新 #1:让自己更清楚一点。我想在流程的每 100 次迭代中重绘一次绘图。我希望该图反映当前累积的速度点。我希望它从 0 扩展到最大步数,并且我希望它在尚未计算速度的地方为空。

【问题讨论】:

  • 您的缩进错误。 x=y=plot 命令需要在循环之外。
  • 不,他们没有。我想每 100 次迭代重绘一次绘图。
  • Steps 具有全部长度,而速度仍在循环内构建。因此它们的长度不匹配。
  • 我知道。这正是我遇到的问题。我刚刚更新了帖子以澄清。
  • 试试 x = np.arrange(len(speeds))

标签: python numpy matplotlib


【解决方案1】:

我会以交互方式绘制每一对 x 和 y,并将绘图的限制设置为所需的值。如果以后需要,您仍然可以附加数据。看这个例子:

import time
import matplotlib.pyplot as plt
import matplotlib

plt.ion()

fig = plt.figure(1,figsize=(5,5))
ax  = fig.add_subplot(111)
steps = 1000
ax.set_xlim(0,steps)
ax.plot(1,1)
plt.draw()

start = time.time()
speeds = []
for step in range(steps):
    #Your stuff here
    if step % 100 == 0:
        speed = (step + 1.0) / (time.time() - start)
        plt.plot(step, speed, 'ko')
        plt.draw()
        plt.pause(1)

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 2019-05-31
    • 2014-05-29
    • 2018-01-18
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多