更新:我将文件上传到 dropbox,可以通过此链接下载(我希望这有效,我不经常使用 dropbox): https://www.dropbox.com/scl/fi/vd0s9g080m8h9fxh7rn9l/IASISND02_20240702161759Z_20240702175655Z_epct_d9f95b34 _F .nc?rlkey=isrwelpr9abbqswr91unrhpkp&st=6hkb5u2l&dl=0
我已经下载了一个netCDF数据集,我用xarray读取它,但它的结构相对复杂,我无法掌握如何以通用格式导入它作为(时间,纬度,经度),以便我可以在地图上绘制相关变量的值。
我将发布一个较短的版本,并在下部部分中向变量添加附加信息,这更多或减少打印所有变量的信息,我认为这些信息与将数据带入一般结构(时间、纬度、长)相关。
简短版本:
我使用 xarray 打开 netcdf 文件|| |这个文件有 77 个变量,我对变量的值感兴趣
netcdf = xr.open_dataset(
'path/tofile/IASISND02_20240702161759Z_20240702175655Z_epct_d9f95b34_F.nc'
)
:
integrated_co2
坐标不是坐标,但似乎是坐标的索引,它们存储在数据集中的两个变量中,名称为“lat”和“lon”。此外,还有两个时间变量。
我认为相关的变量形状是:
print(netcdf.integrated_co2)
# Relevant variables in the netcdf-file:
var_names = [
"lat",
"lon",
"record_start_time",
"record_stop_time",
"across_track",
"along_track",
"integrated_co2",
]
for var in var_names:
print(f"{var}: {netcdf[var].shape} ")
和
lat
变量包含以度为单位的坐标,
lon
包含从1到742的数字,
along_track
包含从1到120的数字,时间变量包含 7.732523e+08 形式的数字。
across_track
我认为,一切都在那里,坐标、时间戳、co2 值,但有点令人困惑,实际形式的坐标是实际坐标的索引。至少这是,它看起来是什么?
如何将这些变量带入 (time,lat,lon) 的一般结构中,以便我能够在 a 上绘制“integrated_co2”的数据地图?
如果有人知道如何重组这些数据,我会很高兴。我是初学者,我已经阅读了很多有关如何使用数据的内容,但还没有找到类似的示例。
以下是相关变量的一些
附加信息 : to the relevant variables:
print(netcdf.along_track)
print(netcdf.across_track)
print(netcdf.lat)
print(netcdf.lon)
print(netcdf.record_start_time)
print(netcdf.record_stop_time)
可以使用 xarray 和 NumPy 的组合来重构的 netCDF 数据。的数据似乎以沿轨道和跨轨道坐标作为主维度存储,需要使用纬度和经度信息对其进行重新索引。
以下是实现此目标的方法:
import xarray as xr
import numpy as np
# 加载 netCDF 数据
netcdf = xr.open_dataset('IASISND02_20240702161759Z_20240702175655Z_epct_d9f95b34_F.nc')
# 创建新的纬度和经度坐标
lat = np.array(netcdf['lat']).reshape((120, 742))
lon = np.array(netcdf['lon']).reshape((120, 742))
# 使用新的纬度和经度坐标重新索引 integrated_co2 数据
co2 = netcdf['integrated_co2'].values.reshape((75, 120, 742))
co2_reindexed = co2.transpose(0, 1, 2)
# 创建一个新的 xarray 数据集
ds = xr.Dataset(
{
'integrated_co2': (('time', 'latitude', 'longitude'), co2_reindexed),
},
coords={
'time': netcdf['record_start_time'].values,
'latitude': (('latitude', 'longitude'), lat),
'longitude': (('latitude', 'longitude'), lon),
},
)
# 现在,应该拥有一个具有 (time, latitude, longitude) 维度的 integrated_co2 数据集
print(ds)
# 可以使用此数据集在地图上绘制 integrated_co2 的值
# 例如,使用 matplotlib 和 cartopy:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig = plt.figure(figsize=(12, 6))
ax = plt.axes(projection=ccrs.PlateCarree())
# 选择要绘制的时间切片
time_index = 0
ds['integrated_co2'][time_index].plot(ax=ax, transform=ccrs.PlateCarree())
ax.coastlines()
plt.show()
这段代码首先从 netCDF 文件中加载数据,然后创建新的纬度和经度坐标,并将 integrated_co2 数据重新索引到新的坐标系中。最后,它创建一个新的 xarray 数据集,其中包含重新索引的数据和新的坐标。
现在,可以使用此新的 xarray 数据集在地图上绘制 integrated_co2 值,或者对其执行任何其他所需的操作。
标签:python,python-xarray,netcdf,netcdf4 From: 78744917