gpt4 book ai didi

python - 使用 xarray 绘制 netCDF,数据未显示,但图例是

转载 作者:行者123 更新时间:2023-12-01 00:29:21 25 4
gpt4 key购买 nike

我正在尝试在 atmospheric composition analysis group 的 netCDF 文件上使用 xarray 中的简单 .plot() 函数。 .

假设我想绘制 2000 年北美的 PM2.5 浓度,可用 here .

当我尝试绘制数据集时,即使数据存在(如图例栏所示),我也会得到一个空图。

import xarray as xr
import netCDF4 as nc
import matplotlib.pyplot as plt

path_to_nc="my/path/file.nc"

ds=xr.open_dataset(path_to_nc)
print(ds)
>>>

<xarray.Dataset>
Dimensions: (LAT: 4550, LON: 9300)
Coordinates:
* LON (LON) float64 -138.0 -138.0 -138.0 -138.0 ... -45.03 -45.01 -45.01
* LAT (LAT) float64 68.0 67.99 67.97 67.96 ... 22.53 22.52 22.51 22.5
Data variables:
PM25 (LAT, LON) float32 ...

该文件确实有值(不仅仅是 nan)。

# Range of values:
ds=ds['PM25']
print(ds)
>>>

<xarray.DataArray 'PM25' (LAT: 4550, LON: 9300)>
array([[1.6, 1.6, 1.6, ..., 1.2, 1.2, 1.2],
[1.6, 1.6, 1.6, ..., 1.2, 1.2, 1.2],
[1.6, 1.6, 1.6, ..., 1.2, 1.2, 1.2],
...,
[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan]], dtype=float32)
Coordinates:
* LON (LON) float64 -138.0 -138.0 -138.0 -138.0 ... -45.03 -45.01 -45.01
* LAT (LAT) float64 68.0 67.99 67.97 67.96 ... 22.53 22.52 22.51 22.5
Attributes:
standard_name: PM25
units: ug/m3

但是如果我尝试绘制这些值,那么我会得到一把空斧头。

ds.plot()

Output

最佳答案

问题是您试图将太多数据绘制在一起。如果您只选择其中的一个子集,它就可以工作:

#select data
dssel=ds.where((-125 < ds.LON) & (ds.LON < -115)
& (49 < ds.LAT) & (ds.LAT < 55), drop=True)
#plot PM2.5
plt.figure()
dssel.PM25.plot()

结果如下: enter image description here

有趣的是,如果直接使用 matplotlib 绘制数据,速度会快得多,而且我能够绘制整个数据集(在我 4 年前使用的、速度不是特别快的笔记本电脑上,大约需要 20 秒)。在本例中,我使用 netCDF4 库加载 PM2.5 数据集。

from netCDF4 import Dataset
nc_fid = Dataset(fpath, 'r')

lats = nc_fid.variables['LAT'][:] # extract/copy the data
lons = nc_fid.variables['LON'][:]
PM25 = nc_fid.variables['PM25'][:]

fig, axs = plt.subplots(figsize=(15, 10), nrows=2,ncols=1,gridspec_kw={'height_ratios': [20,1.5]},constrained_layout=True)
pcm=axs[0].pcolormesh(lons,lats,PM25,cmap='viridis')
cbar=fig.colorbar(pcm,cax=axs[1], extend='both', orientation='horizontal')
cbar.set_label('PM 2.5 [$\mu$g m$^{-3}]$')

enter image description here

关于python - 使用 xarray 绘制 netCDF,数据未显示,但图例是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58309929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com