我目前正在运行一个简单的FuncAnimation,该动画可以对来自卫星的netCDF文件中的一系列图像进行动画处理。该脚本还包含暂停功能。动画工作正常,但是一旦我尝试将动画覆盖在Cartopy上,代码将导致以下结果:
这就是我在做什么:
import argparse
from datetime import datetime
import cartopy.crs as ccrs
import os
import glob
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import xarray
pause = False
def on_click(event):
global pause
pause = not pause
def animate(frame, ax):
if pause: return
file, date = frame
with xarray.open_dataset(file, decode_times=False) as dataset:
plt.cla()
dataset.CHL[0].plot(ax=ax, transform=ccrs.PlateCarree())
ax.set_title(date)
parser = argparse.ArgumentParser()
parser.add_argument('directory')
args = parser.parse_args()
path = os.path.join(args.directory, '*.nc')
files = glob.glob(os.path.join(args.directory, '*.nc'))
if not files:
raise ValueError('no net CDF files found in %s' % path)
frames = []
for file in files:
datestr = file[:len(file) - len('.nc')]
datestr = datestr[len(datestr) - len('2017-09-19'):]
date = datetime.strptime(datestr, '%Y-%m-%d')
if (args.start_date <= date <= args.end_date):
frames.append((file, datestr))
sorted_frames = sorted(frames, key=lambda k: k[1])
fig, ax = plt.subplots(subplot_kw={'projection': ccrs.NearsidePerspective(central_latitude=32.5, central_longitude=34)})
fig.suptitle('Title')
ax.gridlines(crs=None, draw_labels=False, xlocs=np.linspace(30, 36, 4),
ylocs=np.linspace(31, 35.5, 4))
ax.coastlines(resolution='110m', color='black')
ax.set_extent([30, 36, 31, 35.5]) #lon1, lon2, lat1, lat2
fig.canvas.mpl_connect('button_press_event', on_click)
anim = animation.FuncAnimation(fig, animate, sorted_frames, fargs=(ax,), interval=500, blit=False)
plt.show()
任何想法都将受到欢迎。我是Cartopy的新手,在使用netCDF数据进行操作时遇到了问题。
谢谢。