Matplotlib 简单动画


我的github链接

(1)关键函数

需要实现两个函数:func和init_func。

animation.FuncAnimation(fig=fig,        # 绘制动画的figure
                        func=animate,     # 更新函数
                        frames=100,       # iterator。 若整数会化成range(100)。 每个值会传入到func。 
                        init_func=init,   # 初始化函数。 自定义开始帧。
                        interval=20,      # 间隔 ms
                        blit=False)    

(2)示例

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


# 制造数据,10个
x = np.arange(10)
anim_frames = []   # (20,2,10) ,20 frames ,2 lines 
for i in range(20):
    anim_frames.append([np.arange(10)+i,np.arange(10)+2.5*i+0.7])
anim_frames = np.asarray(anim_frames)
print(anim_frames)
print(anim_frames.shape)



# 绘制动画
fig, ax = plt.subplots()
line_a, = ax.plot([], [], 'r-', label='test_a')
line_b, = ax.plot([], [], label='test_b')
frame_number = ax.text(0.05,0.95,'',transform=ax.transAxes) 
ax.legend()

def init():
    ax.set_xlim(-1,12)
    ax.set_ylim(0, 40)
    line_a.set_data(x, np.arange(10))
    line_b.set_data(x, 2*np.arange(10))
    frame_number.set_text('')
    return (line_a, line_b,frame_number)

def update(index):     # 在range(10)的循环中会调用该函数,值为0-9。 
    frame_number.set_text(
        'Frame: {}/{}'.format(index+1, len(anim_frames))
    )
    y_a,y_b = anim_frames[index]
    line_a.set_data(x, y_a)
    line_b.set_data(x, y_b)
    return (line_a, line_b,frame_number)

anim = FuncAnimation(fig, update, frames=range(len(anim_frames)),init_func=init, blit=True)
anim.save('anim.gif', writer='imagemagick', fps=12)   # dpi=1000
plt.show()

(3)结果

(4)相关链接

  1. matplotlib.animation.FuncAnimation
  2. matplotlib.axes.Axes.text
  3. 我忘记要不要安装imagemagick了,可以参考教程
  4. 更多示例
优质内容筛选与推荐>>
1、TCP 重新发送
2、【20090630-01】ArcGIS9.2新功能之File Geodatabase(对比PGDB) 转
3、java调用.net的web service(.net端)
4、洛谷 U10223 Cx大帝远征埃及
5、Scala编程入门---数组操作之数组转换


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号