循环脚本以生成多个图像

2024-04-24 01:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我用xarray打开了一个Netcdf数据集,其中包含维度[时间、高度、纬度、经度]。我编写了一个代码,将特定时间戳的所有数据投影到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


Tags: 数据方法代码图像np时间条目plt
1条回答
网友
1楼 · 发布于 2024-04-24 01:16:16

把它放在一个循环中似乎很简单,所以我不知道为什么这么困难。不过,您可以尝试以下方法。在这里,我将一些定义移到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) 

相关问题 更多 >