Цикл сценария для создания нескольких изображений - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть набор данных Netcdf с измерениями [время, высота, широта, долгота], которые я открыл с помощью xarray.Я написал код, который проецирует все данные за определенную временную метку на картографическую карту и сохраняет изображение в моем каталоге.Я хотел бы создать изображение для каждой метки времени, но на данный момент единственный способ, которым я знаю, как это сделать, - это вручную изменить запись метки времени и снова запустить код.Поскольку существует 360 временных меток, это, очевидно, займет некоторое время.Я знаю, что Python удобен для циклов, но я очень незнаком с ними, так есть ли способ встроить этот код в цикл, чтобы я мог сохранять несколько изображений за один раз?

pv=data1.pv*10000
pv850=pv[:,0,:,:]
lons=pv850.longitude
lats=pv850.latitude

Fig = plt.figure(figsize=[10,8])
ax = plt.axes(projection=ccrs.NorthPolarStereo())
normi = mpl.Normalize(vmin=-1.5, vmax=12)
cs = ax.contourf(lons, lats, pv850[0,:,:], 50, 
                 transform=ccrs.RotatedPole(), extend='both',
                 cmap='jet')
plt.colorbar(cs)
ax.coastlines()
ax.gridlines(crs=ccrs.Geodetic(), linestyle='--')

theta = np.linspace(0, 2*np.pi, 100)
center, radius = [0.5, 0.5], 0.5
verts = np.vstack([np.sin(theta), np.cos(theta)]).T
circle = mpath.Path(verts * radius + center)
ax.set_boundary(circle, transform=ax.transAxes)

plt.title('Polar Plot 01-01-2018 00:00')
plt.savefig('image1.png')

строка ax.contourf(lons, lats, pv850[0,:,:] управляет отметкой времени, где «0» соответствует записи отметки времени (в диапазоне от 0 до 359).Я также хотел бы, чтобы временная метка в заголовке менялась с каждым графиком, если это возможно.Наконец, вот картина окончательного сюжета.

enter image description here

1 Ответ

0 голосов
/ 02 февраля 2019

Кажется простым сделать это в цикле, поэтому я не уверен, почему это так сложно.Тем не менее, вы можете попробовать следующее.Здесь я переместил некоторые определения за пределы цикла for, поскольку вам не нужно определять их 360 раз снова и снова.

theta = np.linspace(0, 2*np.pi, 100)
center, radius = [0.5, 0.5], 0.5
verts = np.vstack([np.sin(theta), np.cos(theta)]).T
circle = mpath.Path(verts * radius + center)

for i in range(360):
    Fig = plt.figure(figsize=[10,8])
    ax = plt.axes(projection=ccrs.NorthPolarStereo())
    normi = mpl.Normalize(vmin=-1.5, vmax=12)
    cs = ax.contourf(lons, lats, pv850[i,:,:], 50, 
                     transform=ccrs.RotatedPole(), extend='both',
                     cmap='jet')
    plt.colorbar(cs)
    ax.coastlines()
    ax.gridlines(crs=ccrs.Geodetic(), linestyle='--')
    ax.set_boundary(circle, transform=ax.transAxes)

    plt.title('Polar Plot 01-01-2018 00:{:02d}'.format(i))
    plt.savefig('image%s.png' %i) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...