【问题标题】:A Matplotlib figure loop which plots and waits for raw_input绘制并等待 raw_input 的 Matplotlib 图形循环
【发布时间】:2016-10-22 03:04:40
【问题描述】:

我有一个循环脚本,它会绘制 (matplotlib),然后在绘制之后等待raw_input,然后再继续。这将允许我在循环继续之前删除我不想要/不需要的任何数字。

我尝试了几种不同的方法,但在继续之前它们似乎从未正确显示数字。

# test1
x = [1, 2, 3]
plt.ion() # turn on interactive mode
for loop in range(0,3):
    y = np.dot(x, loop)
    plt.figure()
    plt.plot(x,y)
    plt.show()
    _ = raw_input("Press [enter] to continue.")

^ 这个绘制了图形窗口,但在循环结束之前什么都不显示

#test2
x = [1, 2, 3]
plt.ion() # turn on interactive mode
for loop in range(0,3):
    y = np.dot(x, loop)
    plt.figure()
    plt.plot(x,y)
    plt.pause(0.02)
    plt.show()
    _ = raw_input("Press [enter] to continue.")

^ 这张图很好地绘制了图形,但随后在 raw_input 打开时冻结并且图形窗口崩溃​​。完整循环完成后,窗口再次恢复正常(可用且可缩放)

我查看了plt.show(block=False) 命令,但没有任何进展

有什么想法吗?

注意这个问题与here 的问题非常相似,但是,正如您从上面的示例中看到的那样,我没有设法使用这些答案(建议plt.ion()plt.pause(0.2)

【问题讨论】:

  • 你试过 plt.draw() 代替吗?
  • 嘿@hashcode55,刚刚尝试过(用plt.draw()替换plt.show()),它产生与test2相同的结果
  • 我知道如何完成这项工作。我有同样的问题,并用 matplotlib TimedAnimation 解决了它。当新数据到达时,我可以流畅地更新图表。我现在没有时间,但我明天可以解释一下细节。
  • @mjp 有点奇怪,因为代码甚至没有替换 plt.show() 在我的机器上运行良好。
  • @hashcode55 在您按下回车键继续循环之前,您可以看到这些数字并与它们交互而不会崩溃?我已清除所有内容并多次重新启动终端。不知道可能是什么问题。

标签: python python-2.7 matplotlib


【解决方案1】:

正如您几乎发现的那样,plt.pause(interval) 确实有效,因为根据documentation

如果有活动图,会在之前更新显示 暂停,并且 GUI 事件循环(如果有)将在暂停期间运行。

因此,如果您将暂停间隔增加到以下值:

interval = 10 # units of seconds
plt.pause(interval)
plt.show()
input("Press Enter to continue...")
  • 您将能够在该时间间隔内与绘图进行交互。
  • 一旦暂停结束并等待输入,您就不能再 与情节互动。
  • 剧情可能崩溃了,因为你在之后与剧情进行了交互 程序等待 raw_input() 时的暂停,由 方式已更改为 Python 3.x 中的 input() 并且可能也有帮助 防止图形窗口崩溃​​。

【讨论】:

    【解决方案2】:

    你可以尝试的另一件事是这样的......在这里你确实包括暂停,但你可以随意打断它们:)

    import matplotlib.pyplot as plt
    # This gives a total of 30 seconds pause.. which can be interrupted
    n_pauses = 3
    pause_interval = 10
    
    plt.plot(your_array)
    for _ in range(n_pauses):
        try:
            plt.pause(pause_interval)
        except KeyboardInterrupt:
            break
    
    x = input('Enter your input...')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2015-04-24
      相关资源
      最近更新 更多