【问题标题】:Pause matplotlib custom animation loop暂停 matplotlib 自定义动画循环
【发布时间】:2017-09-09 00:49:42
【问题描述】:

我想暂停在我自己的事件循环中运行的动画。这是代码的简化版本:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
from mpl_toolkits.mplot3d import proj3d

import time

def main():
    global paused
    paused = False

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')

    ax.set_ylim(-100, 100)
    ax.set_xlim(-10, 10)
    ax.set_zlim(-100, 100)

    plt.ion()
    plt.show()

    def pause_anim(event):
        global paused
        paused = not paused

    pause_ax = fig.add_axes((0.7, 0.03, 0.1, 0.04))
    pause_button = Button(pause_ax, 'pause', hovercolor='0.975')
    pause_button.on_clicked(pause_anim)

    x = np.arange(-50, 51)

    line = ax.plot([], [], [], c="r")[0]

    y_range = list(np.arange(1, 60, 3))
    y_len = len(y_range)
    idx = 0

    while True:

        if not paused:
            idx += 1
            if idx >= y_len:
                break

            y = y_range[idx]
            z = - x**2 + y - 100

            line.set_data(x, 0)
            line.set_3d_properties(z)

            plt.draw()
            plt.pause(0.2)

        else:
            time.sleep(1)  # this stops button events from happening
            #input("Shoop?")  # prompting for input works
            # I've also tried putting a mutex here

if __name__ == '__main__':
    main()

正如我在代码中提到的,我尝试过 time.sleepLock,但是一旦我暂停,这些都会阻止我取消暂停。如何在不破坏恢复动画功能的情况下暂停循环?

【问题讨论】:

    标签: python animation matplotlib


    【解决方案1】:

    您可以将else-part 中的time.sleep(1) 替换为plt.pause,就像您在if-part 中所做的一样。

            ....
            plt.draw()
            plt.pause(0.2)
        else:
            plt.pause(0.2)
    

    另一个选择当然是使用matplotlib动画,比如FuncAnimation,它有.event_source.stop().event_source.start()这两个方法。 (如本问题的两个答案所示:stop / start / pause in python matplotlib animation

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 2017-05-24
      • 2019-11-04
      • 2011-01-10
      相关资源
      最近更新 更多