寻找一种简单的方法来访问和导出到一个新数组xarray对象中的多个数据变量



我有一个xarray对象,其中包含从HDF4格式导入的MODIS数据。数据集的结构类似于下面的结构,其中我在数据变量中存储了数组格式的谱带——每个谱带都是不同的变量。

# Create example DataSet with 5 variables (let's pretend each layer is a band)
ds = xr.Dataset(
{var: (("band", "x", "y"), np.random.rand(1, 10, 10)) for var in "abcde"}
)

如果带存储在一个数组中,那么使用.plot和内置的facet网格工具可以很容易地探索数据并绘制每个带。然而,在这种情况下,我必须单独绘制每一层或使用循环。有没有一种快速的方法可以自动获取这些变量或带的x个数(例如b、c和e(并绘制它们?

在某些情况下,你可能需要绘制RGB图像,所以我会这样做:

# This is one way of combining  several bands into a single  array object however it's  very 
# manual. I need to specify each band in  the concat statement. But it does  achieve
# the output that I want using a manual approach.
new_object = xr.concat([ds.b,
ds.c],
ds.e,
dim="band")
# Now I can plot the data
new_object.imshow.plot()

我的目标是自动化为绘图/可视化和分析选择x个波段(或x个数据变量(的过程。我不想像上面那样把每个波段硬编码成concat()函数。在上面的例子中,我想绘制一个RGB图像。在其他例子中,我想在加法处理之前直观地探索每个波段,或者只提取一些波段用于其他类型的计算&分析

谢谢你的指示!!

我认为xarray.Dataset.to_array()可能是您想要的。例如,对于RGB图像,我认为以下内容会起作用:

ds.squeeze("band").to_array(dim="band").sel(band=["b", "c", "e"]).plot.imshow()

在这种情况下,您还可以在"band"维度上进行分面:

ds.squeeze("band").to_array(dim="band").plot(col="band")

最新更新