Гистограммы: использование Python matplotlib.bar для цикла - PullRequest
1 голос
/ 17 марта 2019

1001 * Попытка * Я попытался построить несколько гистограмм в python3.7 с matplotlib 3.0.3 и получил проблему: Код:

ind = np.arange(2)
width = 0.35
data = [(0.5, 0.1), (0.8, 0.3)]
for i in data:
    plt.bar(ind, i[0], width, yerr=i[1])
plt.ylabel('scratchwidth /cm')
plt.show

Выходы:

Я ожидаю график с двумя барами (0|0.5) и (1|0.8) с неопределенностью 0.1 и 0.3. Я получаю два бара, оба с y = 0,8 и неопределенностью 0,3 . plt.bar() не работает в цикле for? Как мне решить эту проблему?

1 Ответ

0 голосов
/ 17 марта 2019

Вы должны передать массив Y и массив Err функции bar. Преобразуйте ваши данные из массива точек в массив массивов Y и Err:

ind = np.arange(2)
width = 0.35
data = [(0.5, 0.1), (0.8, 0.3)]
y, err = list(zip(*data)) # Transpose the data array
plt.bar(ind, y, width, yerr=err)
plt.ylabel('scratchwidth /cm')
plt.show()

Или, поскольку вы уже используете numpy, используйте массив numpy:

....
data = np.array([(0.5, 0.1), (0.8, 0.3)])
plt.bar(ind, data[:,0], width, yerr=data[:,1])
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...