簡體   English   中英

修剪 netCDF? 或者只是選擇我想要的數據(特定時間、緯度、經度)到 plot?

[英]Trimming down a netCDF? Or just selecting data that I want (specific time, lat, lon) to plot?

我有一個每日全球海洋表面溫度的大(> GB)文件。 我以前從未真正使用過 netCDF 文件,主要是更小的 pandas 數據幀和 CSV。 經過一番擺弄,我能夠使用 netCDF 數據制作一些世界地圖,但我也從月度數據開始,因此數據量與日值相比要大得多。 我現在使用 numpy 和 matplotlib,Python 在 ZAEA23489CE3AACDA4B6406EBB28E 上。 我嘗試了 xarray,但它無法分配空間......有沒有可以操作 netCDF 的軟件的建議? 或者有沒有辦法“忽略”我不需要的價值觀? 我遇到了掩蔽,但我不確定這是否有幫助? 切片?

例如,從這個 netCDF 中,我只想訪問夏威夷群島周圍的數據,以及具體的時間范圍。

這是出於海洋學/氣候學目的。

你似乎在這里問了很多問題。

首先,您可以使用 xarray 對地理數據進行切片。 只需閱讀本指南並進行一些谷歌搜索,您應該會找到解決方案。 在不了解 netCDF 網格的情況下,無法提供具體答案。 空間應該不是問題,因為 xarray 可以懶惰地做事。 您還可以使用 dask 處理 xarray 中的多文件數據集。

在替代方案方面,您可以使用 NCO。 地理種植看起來像這樣。

ncks -d lat,0.,90. infile.nc outfile.nc

如果您可以訪問 Linux,您也可以使用 CDO 或我在 Python 中的 package 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")

如果您只想要數據集的較小部分,我會推薦CDO 使用它,您可以從有點太大的文件中提取單個區域、時間片和變量。

例如,如果您只想在歐洲擁有變量 tsurf(地表溫度),您可以使用

cdo -selvar,tsurf -sellonlatbox,-44.5,64.5,22,72.5 infile.nc outfile.nc

過濾掉它們。 (在命令行上)

然后,您可以使用xarray (例如在 jupyter 中)簡單地 select 某些時間尺度。

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)) 

如果您現在想要 plot 溫度的年平均值,這很容易做到

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 中顯示地理數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM