#python #matplotlib
#python #matplotlib
Вопрос:
Я использую windrose.py и не получайте те же результаты выборки, что и другие. Вместо того, чтобы «N» было вверху, я получаю 90 в верхней части изображения. У меня есть несколько скоростей ветра для каждого направления. Сначала я тестирую построение графика в одном направлении. Я не знаю, как построить остальные 350 градусов. График НЕ отображается при 10 градусах, как указано в массиве направлений ветра. Это код:
from windrose import WindroseAxes
from matplotlib import pyplot as plt
import matplotlib.cm as cm
import numpy as np
from matplotlib.projections import register_projection
register_projection(WindroseAxes)
ws = [1.81,1.58,0.09,0.11,0.01]
wd = [10,10,10,10,10]
ws_array = np.array(ws)
wd_array = np.array(wd)
ax = WindroseAxes.from_ax()
ax.bar(wd_array, ws_array, normed=True, opening=1.0, edgecolor='white')
color_s = ['red', 'blue', 'lime', 'yellow', 'violet', 'aqua', 'pink', 'grey', 'darkred', 'navy', 'green']
ax.set_legend(title = 'Wind Speed in Knots', bbox_to_anchor=(1.05, 1), loc='upper left', handles = color_s, borderaxespad=0.)
Комментарии:
1. Нет необходимости отображать скорости ветра отдельно для каждого направления ветра. Просто используйте все массивы скорости и направления ветра при построении графика.
2.Это действительно проблема, которая обсуждается и рассматривается здесь: github.com/python-windrose/windrose/issues/151 github.com/python-windrose/windrose/pull/146
Ответ №1:
Я обнаружил, что мне просто нужно было установить метки галочек:
ax.set_xticklabels(['E', 'NE', 'N', 'NW', 'W', 'SW', 'S', 'SE'])
Как вы сказали, исходные числовые метки тиков смещены на 90 градусов. Однако данные отображаются в правильной для меня ориентации.
Стоит проверить, что это относится и к вам. Я проверил, как выглядели мои данные с помощью гистограммы. Для меня это было очень просто, так как мои массивы скорости и направления ветра относятся к серии Pandas. Так что я смог просто сделать wd.plot.hist()
Ответ №2:
У меня те же проблемы, только что установил windrose версии 1.6.8, мне удалось найти обходной путь:
ax.set_xticklabels(['N', 'NW', 'W', 'SW', 'S', 'SE','E', 'NE'])
ax.set_theta_zero_location('N')
Комментарии:
1. Это будет еще лучший ответ, если вы объясните свой код и опубликуете результат.
2. Я поддержал это для первой строки, но для меня
ax.set_theta_zero_location
это портит ориентацию данных
Ответ №3:
У меня такая же проблема. Насколько я понимаю, направления ветра — это углы, с которых дует ветер, следующим образом: 0 = на север, 90 = на восток, 180 = на юг, 270 = на запад. Это должно быть нанесено на розу ветров с использованием тех же углов.
В вашем примере вы выбрали 10 в качестве направления ветра, которое в основном северное, с небольшим восточным компонентом. Поэтому я думаю, что ваша фигура правильно отображает направление. Если вместо этого вы попытались использовать угол 45, вы должны увидеть розу ветров, построенную в верхнем правом квадранте.
Единственная проблема (с которой я тоже сталкиваюсь) связана не с самим графиком, а с метками, которые не соответствуют данным. Это должно быть устранено в самом пакете python, но пока вы можете просто перемаркировать свои оси следующим образом:
ax.set_xticklabels(['E','N-E','N','N-W','W','S-W','S','S-E'])
Это не влияет на сам график, а просто заменяет метки (заменяя 0 на ‘E’, 45 на ‘N-E’ и т.д.), Что я считаю правильным. Проверьте это, используя некоторые другие данные, чтобы быть уверенным.
Этот ответ вдохновлен другим ответом, но они также используют команду «set_theta_zero_location», но я не думаю, что это правильно. Эта команда повернет сам график, чего мы не хотим.
Редактировать: у меня недостаточно репутации, чтобы прокомментировать другой ответ, но было бы здорово, если бы кто-нибудь мог попросить этого человека проверить их код; Я не хочу, чтобы у них были неправильные цифры. 🙂