1. 程式人生 > >Matplotlib 繪製動圖(1)

Matplotlib 繪製動圖(1)

animation.FuncAnimation(fig,func,frames,init_func,interval)

1. 繪製 sin 曲線

fig:fig, ax = plt.subplots()

func:即 update ,每一幀都被呼叫,函式的第一個引數就是下一個引數 frames 裡的values

frames:iterable,可以是整數,整數的話等同於傳遞range(frames),或者 frames = np.linspace()

init_func:初始化函式,就是fig的最初設定,如圖的界限 set_xlim / set_ylim

interval:Delay between frames in milliseconds. Defaults to 200.

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

fig, ax = plt.subplots()
xdata, ydata = [], []
line, = ax.plot([], [], 'r-', animated=False)

#逗號不能去掉,下同
def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return line,

def update(frame)
: xdata.append(frame) ydata.append(np.sin(frame)) line.set_data(xdata, ydata) return line, ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128), interval=30,init_func=init, blit=True) ani.save('sin.gif', writer='imagemagick', fps=30) plt.show()

在這裡插入圖片描述

2. 繪製 sin 軌跡動點

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

fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 200)
y = np.sin(x)
line = ax.plot(x, y)
dot, = ax.plot([], [], 'ro')

def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return line

def gen_dot():
    for i in np.linspace(0, 2*np.pi, 200):
        newdot = [i, np.sin(i)]
        yield newdot

def update_dot(newd):
    dot.set_data(newd[0], newd[1])
    return dot,

ani = animation.FuncAnimation(fig, update_dot, frames = gen_dot, interval = 100, init_func=init)
ani.save('sin_dot.gif', writer='imagemagick', fps=30)
plt.show()

在這裡插入圖片描述