1. 程式人生 > >Matplotlib繪製簡單動圖

Matplotlib繪製簡單動圖

之前寫過一篇關於繪製雨點動圖的部落格

Python/Matplotlib實現雨點圖動畫
部落格中使用了matplotlib的animation模組,使用比較繁瑣,下面介紹一種比較簡單的辦法,使用互動式繪圖和暫停功能實現,直接看下面程式碼:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
# 解決中文亂碼問題
myfont = font_manager.FontProperties(fname=r"C:\Windows\Fonts\msyh.ttc"
, size=14)
N = 20
plt.close() # 關閉開啟的圖形視窗
def anni():
    fig = plt.figure()
    plt.ion() # 開啟互動式繪圖interactive
    for i in range(N):
        plt.cla()           # 清除原有影象
        plt.xlim(-0.2,20.4) # 設定x軸座標範圍
        plt.ylim(-1.2,1.2)  # 設定y軸座標範圍
        # 每當i增加的時候,增加自變數x的區間長度,可以理解為不斷疊加繪圖,所以每次迴圈之前都使用plt.cla()命令清除原有影象
        x = np.linspace(0,i+1,1000) 
        y = np.sin(x)
        plt.plot(x,y)
        plt.pause(0.1)
    # plt.ioff() #關閉互動式繪圖
    plt.show()

anni()

在這裡插入圖片描述

執行程式碼後就能看到動圖效果了

使用annimation模組的方法如下:

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

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots()
line, = ax.plot(x, y, color='k')

def update(num, x, y, line):
    line.set_data(x[:num], y[:num])
    line.axes.axis([0, 10, -1, 1])
    return line,

ani = animation.FuncAnimation(fig, update, len(x), fargs=[x, y, line],
                              interval=25, blit=False)
# ani.save('test.gif')
plt.show()

參考連結
[1]https://zhuanlan.zhihu.com/p/31323002
[2]https://stackoverflow.com/questions/28074461/animating-growing-line-plot-in-python-matplotlib
[3]https://matplotlib.org/api/_as_gen/matplotlib.animation.FuncAnimation.html#matplotlib.animation.FuncAnimation