问题描述
我在这里也是xarray的新手。
我有xarray数据集(维度:时间,纬度,经度),其中包含几个具有相同维度和坐标的数据变量(例如ModelA,ModelB),并且我想对所有变量进行多面板绘图,例如第一步。
为此,我正在尝试使用xarray方面绘图实用程序。 经过反复试验后,我就做到了,但只能以一种非常不礼貌/效率低下的方式来完成,我非常感谢任何建议,以帮助他做得更好。
我特别想知道如何组合两个xarray DataArray,以使其在新的xarray DataArray / DataSet中作为两个单独的数据变量出现,以及如何告诉xarray-plot()应该将数据变量作为“ col”参数用于方面绘图。
非常感谢您的帮助!关于A。
我的代码如下:
import numpy as np
import xarray as xr
import pandas as pd
from datetime import datetime
import nc_time_axis
import cftime
#(1) == Create dummy data,dimensions and coordinates
ntimes,nlat,nlon = 3,8,5
lat = np.linspace(-10,10,nlat)
lon = np.linspace(-20,20,nlon)
year,month,daystart = 2016,3,1
dayend = daystart + ntimes
datestart = str(year).zfill(2)+'-'+str(month).zfill(2)+'-'+str(daystart).zfill(2)
cfdates = xr.cftime_range(datestart,periods=ntimes,freq='1D',calendar='noleap')
data = np.random.randn(ntimes,len(lat),len(lon))
#(2) == Create template 3dim xarray dataarray (xrda) called vara
xrda3D = xr.DataArray(data,coords=[cfdates,lat,lon],dims=['time','lat','lon'])
#(3) == Create xarray dataset (xrds) with two data variables called "vara" and "varB"
xrds3D2var = xr.Dataset({'vara': xrda3D,'varB': xrda3D*1.5})
#--> Failed prior attempts,both leading to TypeError: unhashable type: 'DataArray' (?????)
#(a) xrda3D.name = "vara"; xrda2add=(xrda3D*1.5).rename("varB"); xrds3D2var = xr.Dataset(xrda3D,xrda2add)
#(b) xrds3D2var= xr.Dataset({'vara': xrda3D,'varB': xrda2add} ) #
#(4) == create xrda with data variables encoded in additional dimensions "vardim"
# == like this,facet plotting can be used with name="vardim"
ovarname = '4Ddata'
arrlist = []
for varname in xrds3D2var.keys():
tmp = xrds3D2var[varname] #-- select xrda of individual data variables
arrlist.append(tmp) #-- append to list
xrda4D = xr.concat(arrlist,pd.Index(list(xrds3D2var.keys()),name='vardim'))
xrda4Dt = xrda4D.isel(time=0)
xrda4Dt.plot(col="vardim")
[xarray facet plot over data variables produced from code][1]
[1]: https://i.stack.imgur.com/ldMuT.png
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)