繁体   English   中英

matplotlib分散动画; 原始图始终显示在屏幕上

[英]matplotlib scatter animation; original plot always on screen

我的动画无法正常工作:

使用blit = True时,我始终会在屏幕上显示原始功能,没有它,我会对该功能进行每次更新,但都不希望这样做。

我非常感谢任何帮助,我在带有spyder IDE的Win7上使用了Anaconda SciPy软件包的Anaconda集合

我试过了animation.FuncAnimation()中的参数,但是没有运气,我勉强掌握了代码。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation



def run():

    x = range(100)
    y = range(0, 1000, 10)
    x2 = range(50)
    y2 =range(0, 500, 10)
    fig = plt.figure()
    scat1 = plt.scatter(x, y)


    ani = animation.FuncAnimation(fig, update_plot, blit = True)
    plt.show()

def update_plot(i):
    x = range(i, 100+i)
    y = range(i, 1000+i, 10)
    scat1 = plt.scatter(x,y)


    return scat1,


run()

设置init功能是“设置干净的状态”必需的

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

def run():
    fig = plt.figure()
    pathcol = plt.scatter([], [])

    def init():
        pathcol.set_offsets([[], []])
        return [pathcol]

    def update_plot(i, pathcol):
        x = range(i, 100+i)
        y = range(i, 1000+i, 10)
        pathcol.set_offsets([(xi, yi) for xi, yi in zip(x, y)])
        return [pathcol]

    plt.xlim(-10, 200)
    plt.ylim(-100, 1500)
    ani = animation.FuncAnimation(fig, update_plot, 
                                  init_func=init, 
                                  interval=0,
                                  blit=True, fargs=[pathcol])
    plt.show()

run()
  • 另外,在update_plot内部,请确保使用pathcol.set_offsets修改现有的 PathCollection而不是再次调用plt.scatter 修改现有的Artist将提高动画速度。

  • init不带任何参数,但是我们要init来指代pathcol中创建run 因此,我感动init里面run功能,使得里面init Python会发现pathcol在封闭范围内run

  • 由于fargs=[pathcol]update_plot被传递pathcol fargs=[pathcol] ,因此可以使update_plot成为run之外的函数。 但是由于init嵌套在run ,出于对称性,我决定也将update_plot放入run内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM