
matplotlib 的 animation子模块的 FuncAnimation()函数支持动画功能,可用于动态绘图。
例子1:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro', animated=True)
ax.set_title("动画基本案例",color ='b',fontsize =14)
def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return ln, #注意这个逗号。返回的是元组
    
def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln, #注意这个逗号。返回的是元组
    
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True, interval=20)
#ani.save('sin_dot.gif', fps=20) #可保存动画,fps : 每秒帧数,帧率。
plt.show()#若前面保存了动画,则这里只显示最后一帧下面解释 FuncAnimation()各个参数的含义:
FuncAnimation(fig, update, frames=None, init_func=None, fargs=None, interval=200,repeat=False,blit = False)
fig 代表当前画布。
update是一个函数,用于更新图形的数据。
frames 参数类型可以是一个迭代类型(含numpy数组),每一帧依次传入一个元素到update()函数做参数;也可以是整型,相当于range(frames);还可以是生成器,由生成器生成每帧的数据传给update()函数。
init_func 是一个函数,用于图形初始化,在绘制第一帧前绘制。
fargs 为tuple 或 None。每次调用时传给update()的额外的参数。
interval 为每帧之间的延迟时间,单位毫秒(ms),默认200。
repeat 为bool型,动画结束后是否重复,默认False。
blit 为bool型,是否用blitting技术优化绘图,默认False。
例子2:

"""
=================
An animated image
=================
This example demonstrates how to animate an image.
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
def f(x, y):
    return np.sin(x) + np.cos(y)
x = np.linspace(0, 2 * np.pi, 120)
y = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)
im = plt.imshow(f(x, y), animated=True)
def updatefig(frame,*args):
    global x, y
    x += np.pi / 15.
    y += np.pi / 20.
    im.set_array(f(x, y))
    return im,
ani = animation.FuncAnimation(fig, updatefig, frames = range(100), interval=50, blit=True)
#ani.save('dynamic image.gif', fps=20)
plt.show()例子3:

"""
This example showcases a sinusoidal decay animation.
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def data_gen(t=0):#生成器
    for i in range(800):
        t += 0.1
        yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)
def init():
    ax.set_ylim(-1.1, 1.1)
    ax.set_xlim(0, 10)
    line.set_data([], [])
    #If blit=True, init_func must return an iterable of artists to be re-drawn.
    return line, #注意这里返回的是tuple
def run(data):
    # update the data
    t, y = data
    xdata.append(t)
    ydata.append(y)
    xmin, xmax = ax.get_xlim()
    line.set_data(xdata, ydata)
    if t >= xmax:
        ax.set_xlim(xmin, 2*xmax)
        ax.figure.canvas.draw()
    return line, #注意这里返回的是tuple
fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []
ani = animation.FuncAnimation(fig, run, data_gen, blit=True, interval=1,
                              repeat=False,init_func=init)
#ani.save('decay.gif', fps = 30)
plt.show()本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!