Как преобразовать график Xarray xr.ufuncs.log (data_slice) .plot (cmap = 'magma', vmin = 0, vmax = max_value * .7) в график matplotlib? - PullRequest
0 голосов
/ 19 июня 2020

Итак, в основном у меня есть массив Xarray и NumPy, представляющий одни и те же данные спектрограммы. Следующий код используется для построения Xarrray с очень хорошей четкостью (он вырезает спектрограмму выше максимального значения)

plt.figure(figsize=(3,5))
data_slice = data['__xarray_dataarray_variable__'].sel(slices=41625.0)
max_value = np.log(data.sel(slices=slice(67.5, 5.999625e+05)).max(xr.ALL_DIMS)['__xarray_dataarray_variable__'].values)
xr.ufuncs.log(data_slice).plot(cmap='magma', vmin=0, vmax = max_value*.7)

Здесь у нас есть данные Xarray ->, и мы выбираем конкретную его часть, а затем Постройте его, используя xf.plot. Точно так же у меня есть массив Numpy, который имеет форму (256, 12333), где 12333 представляет количество временных меток, а 256 представляет собой интервалы частот. Как мне указать на моем графике данные об обуви, пока не будет достигнуто максимальное значение в том, что мне нужно построить? Я хочу сделать это так, чтобы получить увеличенное изображение спектрограммы, чтобы я мог ясно видеть звуки. На данный момент я рисую свой массив numpy следующим образом -

plt.imshow(data[:, 30:100])

1 Ответ

1 голос
/ 03 июля 2020

Почему бы просто не преобразовать его в DataArray?

Тогда вы воспользуетесь преимуществами утилит построения графиков xarray.

В частности, вы сможете использовать robust=True kwarg который автоматически удалит потенциальные выбросы из цветового диапазона Dynami c.

Существует также автоматическая c маркировка с использованием атрибута "long_name".

freq_count, time_count = 256, 12333

data = np.random.randn(freq_count, time_count)

da = xr.DataArray(
    dims=("frequency", "time"),
    data=data,
    coords=dict( 
        frequency=np.arange(freq_count), 
        time=np.arange(time_count), 
    ), 
    attrs=dict(long_name="Spectral intensity over time") 
)

Построение:

fig, axes = plt.subplots(ncols=2)
da.plot.imshow(robust=False, ax=axes[0])
da.plot.imshow(robust=True, ax=axes[1])
plt.show()

Сравнение графика robust=False и графика robust=True:

Сравнение графика robust = False и графика robust = True

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...