Обновление массива z с помощью контура

Я пытаюсь создать несколько изображений в серии, используя matplotlib и basemap. По сути, я пытаюсь взять выходные данные метеорологической модели и построить из них график на каждом временном шаге. Тем не менее, я пытаюсь сделать это эффективно, не очищая фигуру и не перерисовывая все (особенно базовую карту) на каждом временном шаге. Ниже приведен соответствующий код.

basem = Basemap(llcrnrlon=setlats[1], llcrnrlat=setlats[0],
                       urcrnrlon=setlats[3], urcrnrlat=setlats[2], 
                       projection='mill', resolution='l')
    ...
x,y = basem(lons, lats)
basem.drawcoastlines()
parallels = np.arange(0.,92,10.)
basem.drawparallels(parallels,labels=[1,0,0,0],fontsize=10)
# draw meridians
meridians = np.arange(180.,360.,10.)
basem.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10)
basem.drawstates()
basem.drawcountries()
cs = basem.contourf(x,y, plotted_var, levels=clevs, 
    cmap = plt.get_cmap(colorbar), extend="max")
cl = basem.contour(x,y, contoured_var, levels=clevsl, colors='k')
cb = basem.barbs(x[points],y[points], 
        barbs_var_u[points], barbs_var_v[points], 
        barbcolor='k',flagcolor='k', pivot='middle',
        length=4)

...
for time in range(time+1,maxt+1):
    timef = time
    plotted_var = multf(np.array(data2[var])[timef,\
            bounds[0]:bounds[1],bounds[2]:bounds[3]])
    if barbs >=0 or barbs ==-2:
        cb[0].set_UVC(barbs_var_u[points], barbs_var_v[points])
    cs.set_array(plotted_var)
    cl.set_array(contoured_var)
    ...

Однако, хотя это изменяет бородки, это не меняет контуры (заполненные или не заполненные). Я почти уверен, что set_array — это не та команда, которую я хочу использовать, но я внимательно изучил и не могу найти эквивалент set_uvc. Кроме того, я также пытался распутать plotted_var и контурный_var, и это также не изменилось. Примечание. Я только пытаюсь обновить компонент z (цвета) контурного графика, x и y должны оставаться прежними.


person Laxsnor    schedule 13.03.2016    source источник
comment
Вам придется удалить и заново создать контурных художников. В рамках создания контуров выполняются значительные вычисления, поэтому обновление на месте нецелесообразно. Однако добавление функциональности для обновления контуров и повторного вычисления на месте было бы хорошим дополнением к mpl.   -  person tacaswell    schedule 13.03.2016
comment
Это неудачно. Что тогда делает set_array? Я предполагаю, что проход по коллекциям контуров и удаление, а затем пересадка только контуров - это путь, да?   -  person Laxsnor    schedule 13.03.2016
comment
Согласен (PR всегда приветствуется!). Да, зацикливание и удаление содержимого ContourSet.collections — это правильно. set_array унаследован от ScalarMappable, который управляет отображением чисел -> цветов. Если вы установите массив той же длины, что и количество контуров, он должен изменить цвета контуров (но мне нужно будет прочитать код, чтобы убедиться, что он действительно это делает).   -  person tacaswell    schedule 13.03.2016
comment
Откровенная самореклама: недавно я экспериментировал с удалением определенных контурных линий. Удалить их все должно быть еще проще. Хотя может быть мой подход плох с точки зрения ссылок или просто слишком сложен.   -  person Andras Deak    schedule 14.03.2016