计算 netcdf 文件的变量相关性并在地图上绘制 Python
Calculate netcdf files' variables correlation and plot on the map with Python
给定两个 nc 文件 here:
data/CMIP6_UKESM1-0-LL_Lmon_piControl_r1i1p1f2_gpp_1960-3059.nc
data/CMIP6_UKESM1-0-LL_Amon_piControl_r1i1p1f2_tas_1960-3059.nc
读取第一个文件:
from netCDF4 import Dataset
import numpy as np
ds1 = Dataset('data/CMIP6_UKESM1-0-LL_Lmon_piControl_r1i1p1f2_gpp_1960-3059.nc')
print(ds1.variables.keys()) # get all variable names
输出:
odict_keys(['gpp', 'time', 'time_bnds', 'lat', 'lat_bnds', 'lon', 'lon_bnds', 'clim_season', 'season_year'])
读取第二个文件:
ds2 = Dataset('data/CMIP6_UKESM1-0-LL_Amon_piControl_r1i1p1f2_tas_1960-3059.nc')
print(ds2.variables.keys())
输出:
odict_keys(['tas', 'time', 'time_bnds', 'lat', 'lat_bnds', 'lon', 'lon_bnds', 'clim_season', 'height', 'season_year'])
检查gpp
变量:
gpp = ds1.variables['gpp'] # gpp variable
print(gpp)
输出:
<class 'netCDF4._netCDF4.Variable'>
float32 gpp(time, lat, lon)
_FillValue: 1e+20
standard_name: gross_primary_productivity_of_biomass_expressed_as_carbon
long_name: Carbon Mass Flux out of Atmosphere Due to Gross Primary Production on Land [kgC m-2 s-1]
units: kg m-2 s-1
cell_methods: area: mean where land time: mean
coordinates: clim_season season_year
unlimited dimensions:
current shape = (3300, 144, 192)
filling on
检查tas
变量:
tas = ds2.variables['tas'] # tas variable
print(tas)
输出:
<class 'netCDF4._netCDF4.Variable'>
float32 tas(time, lat, lon)
_FillValue: 1e+20
standard_name: air_temperature
long_name: Near-Surface Air Temperature
units: K
cell_methods: area: time: mean
coordinates: clim_season height season_year
unlimited dimensions:
current shape = (3300, 144, 192)
filling on
现在我想计算 gpp
和 tas
之间的相关性,然后在地图上绘制它们的相关值。
我该怎么做?谢谢。
你应该可以使用我的软件包 nctoolkit (https://nctoolkit.readthedocs.io/en/latest/) 轻松地做到这一点。
我的理解是您想绘制每个网格单元的时间相关系数。在那种情况下:
import nctoolkit as nc
files = ["data/CMIP6_UKESM1-0-LL_Lmon_piControl_r1i1p1f2_gpp_1960-3059.nc",
"data/CMIP6_UKESM1-0-LL_Amon_piControl_r1i1p1f2_tas_1960-3059.nc"]
ds = nc.open_data(files)
ds.merge()
ds.cor_time(var1 = "gpp", var2 = "tas")
ds.plot()
如果你想要每个时间步长变量之间的空间相关系数,你可以使用以下行代替倒数第二行:
ds.cor_space(var1 = "gpp", var2 = "tas")
给定两个 nc 文件 here:
data/CMIP6_UKESM1-0-LL_Lmon_piControl_r1i1p1f2_gpp_1960-3059.nc
data/CMIP6_UKESM1-0-LL_Amon_piControl_r1i1p1f2_tas_1960-3059.nc
读取第一个文件:
from netCDF4 import Dataset
import numpy as np
ds1 = Dataset('data/CMIP6_UKESM1-0-LL_Lmon_piControl_r1i1p1f2_gpp_1960-3059.nc')
print(ds1.variables.keys()) # get all variable names
输出:
odict_keys(['gpp', 'time', 'time_bnds', 'lat', 'lat_bnds', 'lon', 'lon_bnds', 'clim_season', 'season_year'])
读取第二个文件:
ds2 = Dataset('data/CMIP6_UKESM1-0-LL_Amon_piControl_r1i1p1f2_tas_1960-3059.nc')
print(ds2.variables.keys())
输出:
odict_keys(['tas', 'time', 'time_bnds', 'lat', 'lat_bnds', 'lon', 'lon_bnds', 'clim_season', 'height', 'season_year'])
检查gpp
变量:
gpp = ds1.variables['gpp'] # gpp variable
print(gpp)
输出:
<class 'netCDF4._netCDF4.Variable'>
float32 gpp(time, lat, lon)
_FillValue: 1e+20
standard_name: gross_primary_productivity_of_biomass_expressed_as_carbon
long_name: Carbon Mass Flux out of Atmosphere Due to Gross Primary Production on Land [kgC m-2 s-1]
units: kg m-2 s-1
cell_methods: area: mean where land time: mean
coordinates: clim_season season_year
unlimited dimensions:
current shape = (3300, 144, 192)
filling on
检查tas
变量:
tas = ds2.variables['tas'] # tas variable
print(tas)
输出:
<class 'netCDF4._netCDF4.Variable'>
float32 tas(time, lat, lon)
_FillValue: 1e+20
standard_name: air_temperature
long_name: Near-Surface Air Temperature
units: K
cell_methods: area: time: mean
coordinates: clim_season height season_year
unlimited dimensions:
current shape = (3300, 144, 192)
filling on
现在我想计算 gpp
和 tas
之间的相关性,然后在地图上绘制它们的相关值。
我该怎么做?谢谢。
你应该可以使用我的软件包 nctoolkit (https://nctoolkit.readthedocs.io/en/latest/) 轻松地做到这一点。
我的理解是您想绘制每个网格单元的时间相关系数。在那种情况下:
import nctoolkit as nc
files = ["data/CMIP6_UKESM1-0-LL_Lmon_piControl_r1i1p1f2_gpp_1960-3059.nc",
"data/CMIP6_UKESM1-0-LL_Amon_piControl_r1i1p1f2_tas_1960-3059.nc"]
ds = nc.open_data(files)
ds.merge()
ds.cor_time(var1 = "gpp", var2 = "tas")
ds.plot()
如果你想要每个时间步长变量之间的空间相关系数,你可以使用以下行代替倒数第二行:
ds.cor_space(var1 = "gpp", var2 = "tas")