Matplotlib animation either freezes after a few frames or just doesn't work

前端 未结 8 1323
悲哀的现实
悲哀的现实 2020-12-18 06:04

I\'ve been trying for hours to get this simple script working, but nothing I do seems to help. It\'s a slight modification of the most basic animated plot sample code from t

相关标签:
8条回答
  • 2020-12-18 06:40

    calling time.sleep() or plt.pause() causes flicker on the graph window when using blitting, but I got good results by simply calling the event loop explicitely :

    fig.canvas.blit() # or draw()
    fig.canvas.start_event_loop(0.001) #1 ms seems enough
    
    0 讨论(0)
  • 2020-12-18 06:45

    When you say freezes after the first couple of frames do you mean 2 or 3, or say, 40 or 60, as those are the upper limits of your loop?

    If you want the animation to continue indefinitely you need something like

    while True:
        d = randn(10)
        line.set_ydata(d)
        draw()
        time.sleep(10e-3)
    

    But you'll have to force quit your program.

    0 讨论(0)
  • 2020-12-18 06:48

    I was struggling with this same problem for quite a while. I would recommend taking a look at this example: http://matplotlib.sourceforge.net/examples/animation/strip_chart_demo.html

    I thought I was following this example exactly, but it wasn't working. It would only run the "update" function one time. Turns out the only difference in my code was that the animation.FuncAnimation() was not assigned to a variable. As soon as I assigned the return value of animation.FuncAnimation() to a value, everything worked.

    0 讨论(0)
  • 2020-12-18 06:52

    I was having (I think) the same trouble, where the window would freeze if I took the focus off it or tried to drag it around, using Python 2.7 on Windows 7 with Matplotlib 1.3, and TKAgg backend. I had a call to time.sleep(1) in my main while loop, and when I replaced that with plt.pause(1), that fixed the problem. So, try and use matplotlib's pause function rather than time module sleep function, it worked for me.

    0 讨论(0)
  • 2020-12-18 06:55

    Generally you can't use show() and draw() like this. As the Posts are suggesting, you need a small GUI loop, just look at the Animations examples on the Matplotlib page.

    0 讨论(0)
  • 2020-12-18 07:04

    greetings from the future.

    Here's how you'd do it in python 3:

    import matplotlib
    matplotlib.use('TkAgg') # Qt4Agg gives an empty, black window
    import matplotlib.pylab as plt
    import time
    
    # create initial plot
    z = zeros(10)
    line, = plot(z)
    ylim(-3, 3)
    
    for i in range(60):
        print('frame:', i)
    
        d = randn(10)
        line.set_ydata(d)
        draw()
        #replace time.sleep() with plt.pause()
        plt.pause(0.5)
    
    

    I got rid of the call to ion() and hold(False). I also replaced time.sleep with plt.pause

    0 讨论(0)
提交回复
热议问题