如何更改 xarray 中坐标标签的顺序?

How do i change the order of the coordinate labels in xarray?

当我创建一个 xarray dataArray 时,我可以按照我想要的顺序设置坐标的标签,但是当我使用 .combine_first 从不同的数组向它添加一些数据时,它总是按字母顺序重新排序标签。然后我想在一个图表中用多个数据绘制一个面线图中的数据,这里我遇到了问题,坐标标签的顺序定义了哪条线被绘制在另一条线之上。有没有办法在我合并数据后重新排序标签,或者我如何选择将哪条线绘制在其他线之上?

这里有一个例子,坐标标签 'type' 的顺序不正确

    import matplotlib.pyplot as plt
    import xarray as xr
    import numpy as np
    import pandas as pd
            
            
    data1 = np.random.randn(4, 4,3)
    type = ["b", "c", "a", "d"]
    loc= np.linspace(1,3,3)
            
    times = pd.date_range("2000-01-01", periods=4)
    foo = xr.DataArray(data1, coords=[times, type, loc], dims=["time", "type","loc"])
    foo
        
Out[1]: <xarray.DataArray (time: 4, type: 4, loc: 3)>
array([[
                   ...
                         ]])
Coordinates:
    * time     (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04
    * type     (type) <U1 'b' 'c' 'a' 'd'
    * loc      (loc) float64 1.0 2.0 3.0

这里我制作第二个数组并将其与第一个数组组合:

 data2=np.random.randn(4,1,3)
    type2 =["b"]
    loc2= np.linspace(1,3,3)
    times2 = pd.date_range("2000-01-01", periods=4)
    foo2 = xr.DataArray(data2, coords=[times2, type2, loc2,], dims=["time", "type","loc"])
    foo2
    comb=foo.combine_first(foo2)
    comb
Out[2]: 
<xarray.DataArray (time: 4, type: 4, loc: 3)>
array([[[-2.45206949e+00, -1.39563427e+00,  4.01038823e-01],
        ...
        [-1.60937495e+00,  1.23864314e+00, -3.89573178e-01]]])
Coordinates:
  * type     (type) <U1 'a' 'b' 'c' 'd'
  * time     (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04
  * loc      (loc) float64 1.0 2.0 3.0

在 .combine_first 之后,标签 'a'、'b'、'c'、'd' 将按字母顺序重新排序。 这是我想要绘制它的方式以及我想要更改的线条顺序

t=comb.plot.line(x="time", col="loc", linewidth= 5, col_wrap=3)

Plot

您可以使用 DataArray.sel 根据您的喜好沿着坐标对数组进行排序(这里我使用的是您在问题中定义的 type 列表):

comb.sel(type=type).plot(x="time", col="loc", linewidth= 5, col_wrap=3)