Картопия в funcanimation приводит к наложению изображений - PullRequest
0 голосов
/ 05 декабря 2018

В настоящее время я запускаю простую анимацию FuncAnimation, которая анимирует серию изображений из файлов netCDF со спутника.Скрипт также включает в себя функцию паузы.Анимация работает нормально, но как только я пытаюсь наложить анимацию поверх Cartopy, код приводит к следующему: enter image description here

Вот что я делаю:

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.

Спасибо.

...