我正在尝试使用Geoviews绘制WRF输出。 WRF输出文件包含纬度和经度信息,它们都是2D数组。
所以我现在正在尝试的是:
xr.Dataset
,使其具有这些1D x / y坐标gv.Dataset
创建xr.Dataset
,提供WRF crs
(这是Lambert Conformal,btw)gv.Image
gv.Dataset
醇>
xr.Dataset
看起来像这样:
<xarray.Dataset>
Dimensions: (Time: 48, low_mid_high: 3, south_north: 210, west_east: 210)
Coordinates:
* Time (Time) datetime64[ns] 2016-08-22 2016-08-22T00:30:00 ...
* low_mid_high (low_mid_high) <U4 'low' 'mid' 'high'
* south_north (south_north) float64 -3.7e+06 -3.699e+06 -3.698e+06 ...
* west_east (west_east) float64 6.629e+06 6.627e+06 6.626e+06 ...
Data variables:
cloudfrac (low_mid_high, Time, south_north, west_east) float32 0.533683 ...
我的代码如下:
import geoviews as gv
import wrf
import xarray as xr
cldfrac = xr.open_dataset(FILENAME)
# create the ccrs object for the WRF projection
prj = wrf.get_cartopy(cldfrac._file_obj.ds)
# calculate x/y in Lambert Conformal proj,
# drop original XLONG/XLAT
cldfrac = ASSIGN_XY_COORDS(cldfrac)
geo_dims = ['south_north', 'west_east']
kdims = ['low_mid_high', 'south_north', 'west_east', 'Time']
vdims = ['cloudfrac']
dataset = gv.Dataset(cldfrac, kdims=kdims, vdims=vdims, crs=prj)
dataset.to(gv.Image, geo_dims, crs=ccrs.PlateCarree())
我做得到一个结果,但它不在经度/纬度投影中,而是在原始的Lambert Conformal中,意味着south_north
和west_east
是y和x轴。
两个后端都可以通过大多数GeoViews对象的crs参数在任何支持的投影中使用传入数据。
如何在我的图像中将经度/纬度作为x和y轴?
编辑:如果可能的话,我更愿意使用Bokeh后端。实际上,我并不关心刻度标签,但绘图中的投影是错误的:当x / y轴表示lon / lat时,如在WebMercator投影中,并使用我的LambertConformal数据在gv.Image()
调用中投影,我预计图像的区域是非正方形的(在北半球的上边缘处与左边缘相比,图像范围的下边缘应该更大)。