基于matplotlib實(shí)現(xiàn)數(shù)學(xué)函數(shù)圖像的動(dòng)畫

動(dòng)畫可以更客觀、形象的展示一些結(jié)果,該文來展示一下函數(shù):f(x,t)=x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin(tx\pi)

動(dòng)畫

使用matplotlib.animate

代碼如下:

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

fig, ax = plt.subplots()
plt.axis('equal')
plt.axis('off')
xdata, ydata = np.linspace(-2*np.pi, 2*np.pi, 1000), []
temp1,temp2 = np.power(np.square(xdata),0.33), 0.9*np.sqrt(3.3-np.square(xdata))
ln, = ax.plot([], [], 'r-', animated=False)

def init():
    ax.set_xlim(-np.pi, np.pi)
    ax.set_ylim(-2, 3)
    return ln,

def update(n):
    ydata = temp1 + temp2*np.sin(n*np.pi*xdata)
    ln.set_data(xdata, ydata)
    return ln,

ani = FuncAnimation(fig, update, frames=np.linspace(0, 20, 100), init_func=init, blit=True)
plt.show()

matplotlib.animate中繪圖函數(shù)FuncAnimation(fig,func,frames,init_func,interval,blit)參數(shù)說明:

  • fig為畫布
  • func為自定義的動(dòng)畫函數(shù)
  • frames為func的幀數(shù)參數(shù)
  • init_func自定義初始化函數(shù)
  • interval以毫秒計(jì)的更新頻率
  • blit指示更新所有數(shù)據(jù),還是新變化的數(shù)據(jù)點(diǎn),是布爾值

借助Moviepy

需要安裝Moviepy,通過matplotlib自定義一個(gè)動(dòng)畫函數(shù)即可,需要使用mplfig_to_npimage將畫布對象進(jìn)行轉(zhuǎn)化,然后用VideoClip可導(dǎo)出為gif,也可導(dǎo)出為MP4視頻格式。代碼如下:

import matplotlib.pyplot as plt
import numpy as np
from moviepy.video.io.bindings import mplfig_to_npimage
import moviepy.editor as mpy

duration = 20
fig_mpl, ax = plt.subplots(1,figsize=(5,3), facecolor='white')
plt.axis('equal')
plt.axis('off')
xdata, ydata = np.linspace(-2*np.pi, 2*np.pi, 1000), []
temp1,temp2 = np.power(np.square(xdata),0.33), 0.9*np.sqrt(3.3-np.square(xdata))

ax.set_xlim(-np.pi, np.pi)
ax.set_ylim(-2, 3)
line, = ax.plot([], [], 'r-')

def make_frame_mpl(t):
    ydata = temp1 + temp2*np.sin(t*np.pi*xdata)
    line.set_data(xdata,ydata)
    return mplfig_to_npimage(fig_mpl)

animation =mpy.VideoClip(make_frame_mpl, duration=duration)
animation.write_gif("heart.gif", fps=20)

使用Mayavi

使用方式與Moviepy很類似,這里省略幾行代碼。因?yàn)镸ayavi依賴強(qiáng)大的ITK可視化引擎,所以考慮通過Mayavi處理復(fù)雜的數(shù)據(jù)集,用來制作3D數(shù)據(jù)或可交互數(shù)據(jù)。

想要了解更多數(shù)學(xué)內(nèi)容,請關(guān)注公眾號:“究盡數(shù)學(xué)”“究盡中學(xué)數(shù)學(xué)”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容