def readdat(pth,var): ds = xr.open_dataset(pth) dat = ds[var] # 只读取每年1月的数据 dat = dat.sel(time=dat['time.month'].isin([1])) dat = dat.loc['1981-01-01':'2018-12-01','500',:,:] return dat读取lon,lat
时间: 2023-06-25 09:04:07 浏览: 182
你可以使用以下代码读取 lon 和 lat:
```
lon = ds['lon'].values
lat = ds['lat'].values
```
其中 `ds` 是通过 `xr.open_dataset(pth)` 打开的数据集对象。这将返回一个包含数据集的所有变量和元数据的对象。`ds['lon']` 和 `ds['lat']` 分别是数据集中的经度和纬度变量。`.values` 方法将它们转换为 numpy 数组。
相关问题
import xarray as xr import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs def readdat(pth,var): ds = xr.open_dataset(pth) dat = ds[var].values lon=ds['lon'] lat=ds['lat'] # 只读取每年1月的数据 dat = dat.sel(time=dat['time.month'].isin([1])) dat = dat.loc['1981-01-01':'2018-12-01','500',:,:] return lon,lat,dat AttributeError: 'numpy.ndarray' object has no attribute 'sel'
这个错误提示是因为你在一个 `numpy.ndarray` 上使用了 `.sel()` 这个 xarray.Dataset 特有的方法。你需要将 `dat` 变量转换成 xarray 的 Dataset 或者 DataArray 类型才能使用 `.sel()` 方法。
你可以尝试将以下代码:
```
dat = dat.sel(time=dat['time.month'].isin([1]))
dat = dat.loc['1981-01-01':'2018-12-01','500',:,:]
```
改成:
```
dat = xr.DataArray(dat, coords=[ds['time'], ds['level'], ds['lat'], ds['lon']], dims=['time', 'level', 'lat', 'lon'])
dat = dat.sel(time=dat['time.month'].isin([1]))
dat = dat.loc['1981-01-01':'2018-12-01', 500, :, :]
```
这样就可以使用 `.sel()` 方法来选择数据了。
import xarray as xr import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs def readdat(pth,var): ds = xr.open_dataset(pth) dat = ds[var] # 只读取每年1月的数据 dat = dat.sel(time=dat['time.month'].isin([1])) dat = dat.loc['1981-01-01':'2018-12-01','500',:,:] return dat if __name__=='__main__': pth=r'D:\6termsx\qhyc\sx1\hgt.mon.mean.nc' hgt=readdat(pth,'hgt') #print(hgt.shape) #print(hgt) wp = np.zeros(38) # 初始化空数组 for i in range(38): wp[i] =0.5*(hgt[i,12,62]-hgt[i,24,62]) wpm=np.mean(wp) #平均 wpa=wp[:]-np.tile(wpm,(wp.shape))#中心化 #print(wpa.shape) wps=wpa/np.tile(np.std(wpa),(wpa.shape))#标准化 #print(wps) x = np.linspace(1981,2018,38) plt.plot(x,wps) plt.show()最后如何将图像保存为PDF
可以使用`plt.savefig()`函数将图像保存为PDF格式,代码如下:
```
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
def readdat(pth,var):
ds = xr.open_dataset(pth)
dat = ds[var]
# 只读取每年1月的数据
dat = dat.sel(time=dat['time.month'].isin([1]))
dat = dat.loc['1981-01-01':'2018-12-01','500',:,:]
return dat
if __name__=='__main__':
pth=r'D:\6termsx\qhyc\sx1\hgt.mon.mean.nc'
hgt=readdat(pth,'hgt')
#print(hgt.shape)
#print(hgt)
wp = np.zeros(38) # 初始化空数组
for i in range(38):
wp[i] =0.5*(hgt[i,12,62]-hgt[i,24,62])
wpm=np.mean(wp) #平均
wpa=wp[:]-np.tile(wpm,(wp.shape))#中心化
#print(wpa.shape)
wps=wpa/np.tile(np.std(wpa),(wpa.shape))#标准化
#print(wps)
x = np.linspace(1981,2018,38)
plt.plot(x,wps)
plt.savefig('output.pdf')
```
在`plt.savefig()`函数中指定文件名为`'output.pdf'`即可。
阅读全文