Python 如何使用Xarray从OCO-2/Tropomi NETCDF4文件绘制甲烷地图?

Python 如何使用Xarray从OCO-2/Tropomi NETCDF4文件绘制甲烷地图?,python,python-xarray,netcdf4,Python,Python Xarray,Netcdf4,这是以下问题的后续问题: 我正在处理相同的数据,在理解格式方面有一些问题 我想画一张‘xch4’的地图,作为给定时间内纬度和经度的函数 我假设我可以在给定的时间内定义一个新的结构: new_ds=ds.isel(时间=0) 然后画出这个结构的xch4 新建_ds.xch4.plot() 但这是行不通的 我对Xarray有点陌生,所以非常感谢您的帮助 代码和输出如下所示: import xarray as xr ds=xr.open_dataset('ESACCI-GHG-L2-CH4-CO-TR

这是以下问题的后续问题:

我正在处理相同的数据,在理解格式方面有一些问题

我想画一张‘xch4’的地图,作为给定时间内纬度和经度的函数

我假设我可以在给定的时间内定义一个新的结构:

new_ds=ds.isel(时间=0)

然后画出这个结构的xch4

新建_ds.xch4.plot()

但这是行不通的

我对Xarray有点陌生,所以非常感谢您的帮助

代码和输出如下所示:

import xarray as xr
ds=xr.open_dataset('ESACCI-GHG-L2-CH4-CO-TROPOMI-WFMD-20200430-fv1.nc')
ds
返回的输出是:

<xarray.Dataset>
Dimensions:                 (corners_dim: 4, layer_dim: 20, level_dim: 21, sounding_dim: 549041)
Dimensions without coordinates: corners_dim, layer_dim, level_dim, sounding_dim
Data variables:
    time                    (sounding_dim) datetime64[ns] ...
    latitude                (sounding_dim) float32 ...
    longitude               (sounding_dim) float32 ...
    solar_zenith_angle      (sounding_dim) float32 ...
    sensor_zenith_angle     (sounding_dim) float32 ...
    azimuth_difference      (sounding_dim) float32 ...
    xch4                    (sounding_dim) float32 ...
    xch4_uncertainty        (sounding_dim) float32 ...
    xco                     (sounding_dim) float32 ...
    xco_uncertainty         (sounding_dim) float32 ...
    quality_flag            (sounding_dim) int32 ...
    pressure_levels         (sounding_dim, level_dim) float32 ...
    pressure_weight         (sounding_dim, layer_dim) float32 ...
    ch4_profile_apriori     (sounding_dim, layer_dim) float32 ...
    xch4_averaging_kernel   (sounding_dim, layer_dim) float32 ...
    co_profile_apriori      (sounding_dim, layer_dim) float32 ...
    xco_averaging_kernel    (sounding_dim, layer_dim) float32 ...
    orbit_number            (sounding_dim) int32 ...
    scanline                (sounding_dim) int32 ...
    ground_pixel            (sounding_dim) int32 ...
    latitude_corners        (sounding_dim, corners_dim) float32 ...
    longitude_corners       (sounding_dim, corners_dim) float32 ...
    altitude                (sounding_dim) float32 ...
    apparent_albedo         (sounding_dim) float32 ...
    land_fraction           (sounding_dim) int32 ...
    cloud_parameter         (sounding_dim) float32 ...
    h2o_column              (sounding_dim) float32 ...
    h2o_column_uncertainty  (sounding_dim) float32 ...
Attributes:
    title:                     TROPOMI/WFMD XCH4 and XCO
    institution:               University of Bremen
    source:                    TROPOMI L1B version 01.00.00
    history:                   2019 - product generated with WFMD
    tracking_id:               497532a4-fa32-406d-9f6e-52e87f527d47
    Conventions:               CF-1.6
    product_version:           v1.2
    summary:                   Weighting Function Modified DOAS (WFMD) was ad...
    keywords:                  satellite, Sentinel-5 Precursor, TROPOMI, atmo...
    id:                        ESACCI-GHG-L2-CH4-CO-TROPOMI-WFMD-20200430-fv1.nc
    naming_authority:          iup.uni-bremen.de
    keywords_vocabulary:       NASA Global Change Master Directory (GCMD)
    cdm_data_type:             point
    comment:                   These data were produced at the University of ...
    date_created:              20201030T124301Z
    creator_name:              University of Bremen, IUP, Oliver Schneising
    creator_email:             schneising@iup.physik.uni-bremen.de
    project:                   Climate Change Initiative - European Space Agency
    geospatial_lat_min:        -90
    geospatial_lat_max:        90
    geospatial_lat_units:      degree_north
    geospatial_lon_min:        -180
    geospatial_lon_max:        180
    geospatial_lon_units:      degree_east
    geospatial_vertical_min:   0
    geospatial_vertical_max:   100000
    time_coverage_start:       20200430T000000Z
    time_coverage_end:         20200430T235959Z
    time_coverage_duration:    P1D
    time_coverage_resolution:  P1D
    standard_name_vocabulary:  NetCDF Climate and Forecast (CF) Metadata Conv...
    license:                   ESA CCI Data Policy: free and open access
    platform:                  Sentinel-5 Precursor
    sensor:                    TROPOMI
    spatial_resolution:        7km x 7km at nadir (typically)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/au159666/anaconda3/lib/python3.8/site-packages/xarray/core/dataset.py", line 1959, in isel
    indexers = drop_dims_from_indexers(indexers, self.dims, missing_dims)
  File "/Users/au159666/anaconda3/lib/python3.8/site-packages/xarray/core/utils.py", line 767, in drop_dims_from_indexers
    raise ValueError(
ValueError: dimensions {'time'} do not exist. Expected one or more of Frozen(SortedKeysDict({'sounding_dim': 549041, 'level_dim': 21, 'layer_dim': 20, 'corners_dim': 4}))
输出为:

<xarray.Dataset>
Dimensions:                 (corners_dim: 4, layer_dim: 20, level_dim: 21, sounding_dim: 549041)
Dimensions without coordinates: corners_dim, layer_dim, level_dim, sounding_dim
Data variables:
    time                    (sounding_dim) datetime64[ns] ...
    latitude                (sounding_dim) float32 ...
    longitude               (sounding_dim) float32 ...
    solar_zenith_angle      (sounding_dim) float32 ...
    sensor_zenith_angle     (sounding_dim) float32 ...
    azimuth_difference      (sounding_dim) float32 ...
    xch4                    (sounding_dim) float32 ...
    xch4_uncertainty        (sounding_dim) float32 ...
    xco                     (sounding_dim) float32 ...
    xco_uncertainty         (sounding_dim) float32 ...
    quality_flag            (sounding_dim) int32 ...
    pressure_levels         (sounding_dim, level_dim) float32 ...
    pressure_weight         (sounding_dim, layer_dim) float32 ...
    ch4_profile_apriori     (sounding_dim, layer_dim) float32 ...
    xch4_averaging_kernel   (sounding_dim, layer_dim) float32 ...
    co_profile_apriori      (sounding_dim, layer_dim) float32 ...
    xco_averaging_kernel    (sounding_dim, layer_dim) float32 ...
    orbit_number            (sounding_dim) int32 ...
    scanline                (sounding_dim) int32 ...
    ground_pixel            (sounding_dim) int32 ...
    latitude_corners        (sounding_dim, corners_dim) float32 ...
    longitude_corners       (sounding_dim, corners_dim) float32 ...
    altitude                (sounding_dim) float32 ...
    apparent_albedo         (sounding_dim) float32 ...
    land_fraction           (sounding_dim) int32 ...
    cloud_parameter         (sounding_dim) float32 ...
    h2o_column              (sounding_dim) float32 ...
    h2o_column_uncertainty  (sounding_dim) float32 ...
Attributes:
    title:                     TROPOMI/WFMD XCH4 and XCO
    institution:               University of Bremen
    source:                    TROPOMI L1B version 01.00.00
    history:                   2019 - product generated with WFMD
    tracking_id:               497532a4-fa32-406d-9f6e-52e87f527d47
    Conventions:               CF-1.6
    product_version:           v1.2
    summary:                   Weighting Function Modified DOAS (WFMD) was ad...
    keywords:                  satellite, Sentinel-5 Precursor, TROPOMI, atmo...
    id:                        ESACCI-GHG-L2-CH4-CO-TROPOMI-WFMD-20200430-fv1.nc
    naming_authority:          iup.uni-bremen.de
    keywords_vocabulary:       NASA Global Change Master Directory (GCMD)
    cdm_data_type:             point
    comment:                   These data were produced at the University of ...
    date_created:              20201030T124301Z
    creator_name:              University of Bremen, IUP, Oliver Schneising
    creator_email:             schneising@iup.physik.uni-bremen.de
    project:                   Climate Change Initiative - European Space Agency
    geospatial_lat_min:        -90
    geospatial_lat_max:        90
    geospatial_lat_units:      degree_north
    geospatial_lon_min:        -180
    geospatial_lon_max:        180
    geospatial_lon_units:      degree_east
    geospatial_vertical_min:   0
    geospatial_vertical_max:   100000
    time_coverage_start:       20200430T000000Z
    time_coverage_end:         20200430T235959Z
    time_coverage_duration:    P1D
    time_coverage_resolution:  P1D
    standard_name_vocabulary:  NetCDF Climate and Forecast (CF) Metadata Conv...
    license:                   ESA CCI Data Policy: free and open access
    platform:                  Sentinel-5 Precursor
    sensor:                    TROPOMI
    spatial_resolution:        7km x 7km at nadir (typically)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/au159666/anaconda3/lib/python3.8/site-packages/xarray/core/dataset.py", line 1959, in isel
    indexers = drop_dims_from_indexers(indexers, self.dims, missing_dims)
  File "/Users/au159666/anaconda3/lib/python3.8/site-packages/xarray/core/utils.py", line 767, in drop_dims_from_indexers
    raise ValueError(
ValueError: dimensions {'time'} do not exist. Expected one or more of Frozen(SortedKeysDict({'sounding_dim': 549041, 'level_dim': 21, 'layer_dim': 20, 'corners_dim': 4}))
但结果还是一样的:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/au159666/anaconda3/lib/python3.8/site-packages/xarray/core/dataset.py", line 1959, in isel
    indexers = drop_dims_from_indexers(indexers, self.dims, missing_dims)
  File "/Users/au159666/anaconda3/lib/python3.8/site-packages/xarray/core/utils.py", line 767, in drop_dims_from_indexers
    raise ValueError(
ValueError: dimensions {'time'} do not exist. Expected one or more of Frozen(SortedKeysDict({'sounding_dim': 549041, 'level_dim': 21, 'layer_dim': 20, 'corners_dim': 4}))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/au159666/anaconda3/lib/python3.8/site packages/xarray/core/dataset.py”,第1959行,isel格式
索引器=从索引器(索引器、self.dims、缺少的\u dims)中删除\u dims\u
文件“/Users/au159666/anaconda3/lib/python3.8/site packages/xarray/core/utils.py”,第767行,从索引器中删除
升值误差(
ValueError:维度{'time'}不存在。应为冻结的一个或多个维度(SortedKeysDict({'sounding_dim':549041,'level_dim':21,'layer_dim':20,'corners_dim':4}))

事实证明,使用Xarray很难打开这些文件的原因是它们包含点云而不是网格数据。因此,我使用Nio打开了它们,并按照以下方式绘制它们:

import Nio
import mpl_scatter_density
import matplotlib.pyplot as plt
file=Nio.open_file('../L2-CH4-CO-TROPOMI-WFMD-202004/ESACCI-GHG-L2-CH4-CO-TROPOMI-WFMD-20200415-fv1.nc','r')
xch4=file.variables['xch4']
latitude=file.variables['latitude']
longitude=file.variables['longitude']
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='scatter_density')
ax.scatter_density(longitude, latitude, c=xch4, cmap=plt.cm.RdYlBu)
fig.savefig('methane.png')

您可能想尝试我的包ncplot,它可以自动创建xarray数据集的交互式绘图:。但是您能提供到该数据集的链接吗?这似乎有点不标准。经度/纬度/时间是变量,而不是坐标,这就是代码失败的原因。我将尝试ncplot。可以在此处找到数据:我快速查看了数据。它不适用于ncplot。看起来您必须重新构造数据,以使经度、纬度和时间成为坐标,以获得ncplot或xarray的内置绘图方法来生成地图。实际上,从数据来看,它似乎不太适合xarray,xarray最理想地处理眩晕数据。Geopandas可能是和熊猫在一起还是只和熊猫在一起