如何在xarray中绘制不规则的纬度和经度?

哈马达迪

我有一个netcdf文件,其中包含一个月的每日数据。在此文件中,存在irregular latitude and longitude点数据。我想创建time[0]该数据的绘图或任何时间,但是结果似乎不正确。如何显示该图nan-space

数据文件 https://www.dropbox.com/s/ll35zh4k5ws7nnh/day1.nc?dl=0

import xarray as xr
month_daily1 = xr.open_dataset('/Daily_Month/1/day1.nc')
month_daily1

<xarray.Dataset>
Dimensions:                 (Lat: 175, Lon: 200, time: 31)
Coordinates:
  * time                    (time) datetime64[ns] 2018-01-01 ... 2018-01-31
  * Lat                     (Lat) float64 29.92 29.93 29.94 ... 33.0 33.01 33.02
  * Lon                     (Lon) float64 47.61 47.62 47.63 ... 50.5 50.51 50.52
Data variables:
    Alt                     (time, Lat, Lon) float64 ...
    Temperature             (time, Lat, Lon) float64 ...
    Relative Humidity       (time, Lat, Lon) float64 ...
    Wind speed              (time, Lat, Lon) float64 ...
    Wind direction          (time, Lat, Lon) float64 ...
    Short-wave irradiation  (time, Lat, Lon) float64 ...


# convert kelvin to celsius
data_nonnull = month_daily1.dropna(dim ='time', how='all')
air = data_nonnull.Temperature - 273.15
air


<xarray.DataArray 'Temperature' (time: 31, Lat: 175, Lon: 200)>
array([[[nan, nan, ..., nan, nan],
        [nan, nan, ..., nan, nan],
      ...,

       [[nan, nan, ..., nan, nan],
        [nan, nan, ..., nan, nan],

       [[nan, nan, ..., nan, nan],
        [nan, nan, ..., nan, nan],

Coordinates:
  * time     (time) datetime64[ns] 2018-01-01 2018-01-02 ... 2018-01-31
  * Lat      (Lat) float64 29.92 29.93 29.94 29.95 ... 32.99 33.0 33.01 33.02
  * Lon      (Lon) float64 47.61 47.62 47.63 47.64 ... 50.41 50.5 50.51 50.52


%matplotlib inline

import matplotlib.pyplot as plt
ax = plt.subplot(projection=ccrs.PlateCarree())
air2d = air.isel(time= 0)
air2d.plot.pcolormesh('Lon', 'Lat');

结果 在此处输入图片说明

msi_gerva

我对XArray不太满意,因此建议使用模块netCDF4解决方案:

#!/usr/bin/env ipython
import xarray as xr
import matplotlib as mpl
mpl.use('tkagg')
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
# =======================================================
from netCDF4 import Dataset
ncin=Dataset('day1.nc');
tempin=ncin.variables['Temperature'][0,:,:]- 273.15;
lonin=ncin.variables['Lon'][:];
latin=ncin.variables['Lat'][:];
ncin.close()
# -------------------------------------------------------
from scipy.interpolate import griddata
import numpy as np
kk=np.where(np.isnan(np.array(tempin).flatten())==False)
lonm,latm=np.meshgrid(lonin,latin);
tinterp=griddata((lonm.flatten()[kk],latm.flatten()[kk]),tempin.flatten()[kk],(lonm,latm));

ax = plt.subplot(121,projection=ccrs.PlateCarree())
ax.pcolormesh(lonin,latin,tempin);
ax = plt.subplot(122,projection=ccrs.PlateCarree())
ax.pcolormesh(lonin,latin,tinterp);
plt.show()

最终结果如下所示:左边是原始图像,右边是插值(nan掉落的数字)。 在此处输入图片说明

我可以提出一个答案,在这里我结合XArray和SciPy的的GridData因为interpolate_na不工作很不错(看一部分,并与结果filled_afilled_b)对我来说:

#!/usr/bin/env ipython
import xarray as xr
import matplotlib as mpl
mpl.use('tkagg')
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
# =======================================================
month_daily1 = xr.open_dataset('day1.nc')

# convert kelvin to celsius
data_nonnull = month_daily1.dropna(dim ='time', how='all')
air = data_nonnull.Temperature - 273.15
air2d = air.isel(time= 0)
# =======================================================
ax = plt.subplot(121,projection=ccrs.PlateCarree())
air2d.plot.pcolormesh('Lon', 'Lat');
ax = plt.subplot(122,projection=ccrs.PlateCarree())
filled_a=air2d.interpolate_na(dim='Lat');
filled_b=filled_a.interpolate_na(dim='Lon');
filled_c=filled_b.interpolate_na(dim='Lat');
filled_c.plot.pcolormesh('Lon', 'Lat');
plt.show()
# =======================================================
tempin=air2d.values[:];
lonin=air2d.Lon
latin=air2d.Lat
# -------------------------------------------------------
from scipy.interpolate import griddata
import numpy as np
kk=np.where(np.isnan(np.array(tempin).flatten())==False)
lonm,latm=np.meshgrid(lonin,latin);
tinterp=griddata((lonm.flatten()[kk],latm.flatten()[kk]),tempin.flatten()[kk],(lonm,latm));

ax = plt.subplot(121,projection=ccrs.PlateCarree())
ax.pcolormesh(lonin,latin,tempin);
ax = plt.subplot(122,projection=ccrs.PlateCarree())
ax.pcolormesh(lonin,latin,tinterp);
plt.show()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在XArray中识别时间,经度和纬度坐标?

在xarray中交换纬度和经度位置

如何在Swift中绘制地址,将地址转换为经度和纬度坐标?

在 SVG 中绘制纬度和经度坐标

如何在开放层中获取经度和纬度

如何在地图视图 (Android) 中显示纬度和经度?

在网格数据的4D numpy数组中查找不规则区域(纬度/经度)

如何在具有许多点(纬度和经度)的反应本机地图上绘制折线?

如何在反应中使用 Highcharts 绘制具有经度和纬度的气泡图

如何在Android Google Map V2上放置标记/绘制经度和纬度

如何从Android中的数据库中绘制路径纬度和经度值

如何提取网页中的纬度和经度

如何在Unity 3D中的球体表面上绘制纬度/经度线?

使用Matplotlib-Basemap和Xarray绘制纬度/经度网格线

如何使用python中的纬度和经度数据绘制地图并在地图中突出显示几个纬度和经度点?

如何在ggplot的纵坐标中绘制带有不规则数据的热图?

如何在mongodb集合中存储纬度和经度?以及如何在Spring中使用它?

如何从具有纬度和经度的mysql地址表中获取纬度和经度的距离

从CSV文件绘制纬度和经度

在散点图上绘制纬度和经度

如何在Android中将纬度和经度添加到ArrayList中?

如何在Android中通过纬度和经度获取城市名称?

如何在SQL Server 2014中将经度和纬度存储为地理位置?

如何在 Swift 3.0 中在图像上写入纬度和经度?

如何在Windows Phone 8中使用图钉显示给定纬度和经度的地图

解析服务器-如何在云代码中从ParseGeoPoint提取经度和纬度

如何在Geoserver中输入地址时获得经度和纬度

检测到当前位置后如何在mapbox中获取经度和纬度?

如何在iOS中获取用户位置的纬度和经度