Matplotlib Barbs как функция времени от высоты - неизвестная ошибка - PullRequest
0 голосов
/ 08 мая 2020

У меня есть данные о скорости / направлении ветра для 16 различных уровней высоты. Эти данные записываются с интервалом в 1 минуту. Я пытаюсь создать двухмерную диаграмму, которая имеет уровни высоты по оси Y и время по оси X.

00:00, ws_10feet, wd_10feet, ws_20feet, wd_20feet,....ws_160feet,wd_160feet
00:01, ws_10feet, wd_10feet, ws_20feet, wd_20feet,....ws_160feet,wd_160feet 
00:02, ws_10feet, wd_10feet, ws_20feet, wd_20feet,....ws_160feet,wd_160feet  
...
23:58, ws_10feet, wd_10feet, ws_20feet, wd_20feet,....ws_160feet,wd_160feet 
23:59, ws_10feet, wd_10feet, ws_20feet, wd_20feet,....ws_160feet,wd_160feet 

Из этих данных я выделил скорость и направление ветра на 2 (1440,16) массива, один для u-компонента и один для v-компонента. У меня также есть time_list, который представляет собой просто список из 1440 элементов, и мой level_heights, который представляет собой одномерный массив из 16 элементов.

Соедините их вместе, чтобы построить:

...
ax.barbs([time_list,level_heights],u,v)
...

Я получаю следующую ошибку:

TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Я не уверен, что происходит и как исправить.

1 Ответ

1 голос
/ 08 мая 2020

Если вы действительно хотите отображать все 1440 раз, у вас будет 1440 x 16 точек данных, поэтому все переменные, которые вы передаете в ax.barbs(), должны иметь эти размеры.

Изменить: Я заставил его работать с вашими образцами данных, используя этот ярлык, упомянутый в ax.barbs() документации :

X, Y: [...] Если не указано, они будут сгенерированы как однородная целочисленная сетка на основе размеров U и V.

import numpy as np
import matplotlib.pyplot as plt

level_heights = [720, 700]
u = np.array([[ 36.10376018, -3.65789061], [ 35.96327862, -45.10811509]]) 
v = np.array([[ 36.58522244, -51.57043568], [ 36.44286749, -24.64179281]])

fig, ax = plt.subplots()
ax.barbs(u, v)

ax.set_xticks([0, 1])
ax.set_xticklabels(['start', '1 minute'])

ax.set_yticks([0, 1])
ax.set_yticklabels(level_heights);

wind plot

Вы можете изменить порядок level_heights, чтобы сделать график более естественным.

...