Matplotlib Animation 使用 cartopy 在之前的帧上绘制
Matplotlib Animation plotting over previous frames using cartopy
我正在尝试使用 cartopy 轴和 matplotlib 制作动画。我尝试过的任何方式要么直接在数据上绘制而不清除以前的图像,要么生成多个面板导致动画看起来像这样:
这是生成动画的代码(有点酷,但不是我想要的):
import pylab as PP
fig = PP.figure(figsize=(10, 6))
#ax = fig.add_subplot(1,1,1,projection=ccrs.Robinson(central_longitude=270))
ax = PP.axes(projection=ccrs.Robinson(central_longitude=270))
frames = eofs.shape[0] # Number of frames
eof_num=0
def init():
return animate(0)
def animate(frame):
cdata,clons = add_cyclic_point(eofs[frame,eof_num,...],_z500.lon)
levels = np.linspace(-60,60,21)
cplt = []
cplt = ax.contourf(clons, _z500.lat, cdata, transform=ccrs.PlateCarree(), levels=levels, cmap='RdBu_r')
sigLats, sigLons = nbh.sig_pts_from_pvalues(eof_reg_pvals[frame,eof_num,...],_z500.lat,_z500.lon)
PP.plot(sigLons[::4], sigLats[::4], 'k.', markersize=1, transform=ccrs.PlateCarree())
ax.coastlines()
ax.set_global()
ax.set_title('EOF{} | SEOF#{} | {}'.format(eof_num+1,frame+1,_z500.dates[:-1][::5][frame]))
cb = PP.colorbar(cplt,fraction=0.02)
cb.set_label(label='z500 [m]', fontsize=12)
return(cplt)
ani = animation.FuncAnimation(fig, animate, frames, interval=0.01, blit=False,
init_func=init, repeat=True)
ani.save('test.mp4', writer=animation.FFMpegWriter(fps=4))
PP.close(fig)
无法弄清楚我在这里做错了什么。
谢谢!
看看这个 。
您应该使用 ax.cla()
清除 animate
函数开头的 ax
并将颜色条定义移到该函数之外。
我正在尝试使用 cartopy 轴和 matplotlib 制作动画。我尝试过的任何方式要么直接在数据上绘制而不清除以前的图像,要么生成多个面板导致动画看起来像这样:
这是生成动画的代码(有点酷,但不是我想要的):
import pylab as PP
fig = PP.figure(figsize=(10, 6))
#ax = fig.add_subplot(1,1,1,projection=ccrs.Robinson(central_longitude=270))
ax = PP.axes(projection=ccrs.Robinson(central_longitude=270))
frames = eofs.shape[0] # Number of frames
eof_num=0
def init():
return animate(0)
def animate(frame):
cdata,clons = add_cyclic_point(eofs[frame,eof_num,...],_z500.lon)
levels = np.linspace(-60,60,21)
cplt = []
cplt = ax.contourf(clons, _z500.lat, cdata, transform=ccrs.PlateCarree(), levels=levels, cmap='RdBu_r')
sigLats, sigLons = nbh.sig_pts_from_pvalues(eof_reg_pvals[frame,eof_num,...],_z500.lat,_z500.lon)
PP.plot(sigLons[::4], sigLats[::4], 'k.', markersize=1, transform=ccrs.PlateCarree())
ax.coastlines()
ax.set_global()
ax.set_title('EOF{} | SEOF#{} | {}'.format(eof_num+1,frame+1,_z500.dates[:-1][::5][frame]))
cb = PP.colorbar(cplt,fraction=0.02)
cb.set_label(label='z500 [m]', fontsize=12)
return(cplt)
ani = animation.FuncAnimation(fig, animate, frames, interval=0.01, blit=False,
init_func=init, repeat=True)
ani.save('test.mp4', writer=animation.FFMpegWriter(fps=4))
PP.close(fig)
无法弄清楚我在这里做错了什么。
谢谢!
看看这个
您应该使用 ax.cla()
清除 animate
函数开头的 ax
并将颜色条定义移到该函数之外。