微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xarray数据集:对数据变量进行多面绘制data_vars

如何解决xarray数据集:对数据变量进行多面绘制data_vars

在这里也是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 举报,一经查实,本站将立刻删除。