我有一个每日全球海洋表面温度的大文件(>GB)。我以前从来没有真正使用过netCDF文件,主要是小得多的熊猫数据帧和CSV。通过一些调整,我能够使用netCDF数据制作一些世界地图,但我也是从每月数据开始的,因此数据量与日值相比要大得多。我现在正在使用numpy和matplotlib,在Windows上使用Python。我尝试过xarray,但它无法分配空间...对于可以操作netCDF的软件,有什么建议吗?或者有没有办法“忽略”我不需要的值?我遇到了掩蔽,但我不确定这是否会有帮助?切片?
例如,从这个netCDF,我只想访问夏威夷群岛周围的数据,以及具体的时间范围。
这是出于海洋学/气候学的目的。
发布于 2021-06-11 16:16:48
你似乎问了很多问题。
首先,您可以使用xarray对地理数据进行切片。只要阅读this guide,在谷歌上搜索一下,你就会找到一个解决方案。如果不了解netCDF网格,就不可能提供具体的答案。空间应该不是问题,因为xarray可以懒惰地做事情。您还可以使用dask处理xarray中的多文件数据集。
在替代方案方面,您可以使用NCO。地理裁剪看起来就像这样。
ncks -d lat,0.,90. infile.nc outfile.nc如果可以访问Linux,也可以使用CDO或Python中的我的包nctoolkit (它使用CDO作为后端)来实现这一点。对于nctoolkit,命令应该是这样的:
import nctoolkit as nc
ds = nc.open_data("infile.nc")
ds.crop(lon = [0,90], lat = [0,90])
ds.to_nc("outfile.nc")发布于 2021-06-13 01:21:02
如果您只需要数据集的较小部分,我建议使用CDO。有了它,你可以从你有点太大的文件中提取单个区域,时间片和变量。
例如,如果您只想在欧洲使用变量tsurf (表面温度),则可以使用
cdo -selvar,tsurf -sellonlatbox,-44.5,64.5,22,72.5 infile.nc outfile.nc把它们过滤掉。(在命令行上)
使用xarray,您可以(例如,在jupyter中)简单地选择特定的时间尺度。
import sys, os
import cartopy as ccrs, xarray as xr, matplotlib.pyplot as plt
start_date = "1990-12-31"; end_date = "2020-12-31";
yourXRdataset = xr.open_dataset(os.path.join(PATH_TO_UR_FILE + "/yourfile.nc")
customTimescale = yourXRdataset.sel(time=slice(start_date, end_date)) 如果您现在想要绘制温度的年平均值,这很容易用到
plt.figure(figsize=(20,8), dpi=216)
ax = plt.subplot(projection=ccrs.PlateCarree())
customTimescale['tsurf'].mean('time').plot.contourf(ax=ax, cmap="Spectral_r", levels=33)Cartopy非常适合在python中显示地理数据。
https://stackoverflow.com/questions/67929909
复制相似问题