循环脚本来制作多张图片

问题描述 投票:1回答:1

我有一个的netCDF数据集维度[时间,高度,纬度,经度]我已经与xarray打开。我已经写了项目特定的时间戳的所有数据到cartopy地图和图像保存到我的目录中的代码。我想每一个时间戳创建一个图像,而此刻的唯一途径,我知道如何做到这一点是手动更改的时间戳的条目并再次运行代码。由于有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

python matplotlib cartopy
1个回答
0
投票

这看起来非常简单,所以我不知道为什么会这样很难把这个循环。不过,你可以尝试以下。在这里,我已经搬到外面的一些定义为循环,因为你不需要一次又一次地定义它们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) 
© www.soinside.com 2019 - 2024. All rights reserved.