Мне кажется, я понимаю, что вы ищете. Это способ, которым я бы подошел к этому. Сначала я настрою некоторые данные в вашем стиле:
import matplotlib.pyplot as plt
import numpy as np
import xarray as xr
data = np.random.random((6, 3, 11))
da = xr.DataArray(data, dims=['longitude', 'latitude', 'time'], name='foo')
region_data = np.random.choice(range(6), size=(6, 3))
region = xr.DataArray(region_data, dims=['longitude', 'latitude'], name='region')
ds = xr.merge([da, region])
Этот набор данных, ds
, выглядит следующим образом:
<xarray.Dataset>
Dimensions: (latitude: 3, longitude: 6, time: 11)
Dimensions without coordinates: latitude, longitude, time
Data variables:
foo (longitude, latitude, time) float64 0.7016 0.1519 ... 0.1446 0.2396
region (longitude, latitude) int64 5 1 1 5 0 1 0 0 2 3 0 4 4 3 3 1 2 1
Чтобы вычислить средние значения по регионам, мы можем сначала собрать значения долготы и широты набора данных:
stacked = ds.stack(xy=('longitude', 'latitude'))
Это позволит нам легко использовать groupby
для группировки по номеру региона при вычислении среднего значения:
regional_means = stacked.foo.groupby(stacked.region).mean('xy')
Для построения графика мы можем использовать xarray.DataArray.plot.line
вместе с аргументом ключевого слова hue
, чтобы создать одну панель со строками временных рядов для каждого региона:
lines = regional_means.plot.line(hue='region', add_legend=False)
labels = range(6)
plt.legend(lines, labels, ncol=2, loc='lower right')
Здесь мы решили создать нашу собственную легенду, чтобы дать нам как можно больше контроля над ее положением и форматом. Это дает сюжет, как это:
![Multi-line plot](https://i.stack.imgur.com/KnAhC.png)
Больше примеров построения линий можно найти здесь .