Как построить гистограмму с использованием Matplotlib в Python со списком данных?
Я пытаюсь построить гистограмму, используя matplotlib.hist()
но я не уверен, как это сделать.
У меня есть список
probability = [0.3602150537634409, 0.42028985507246375,
0.373117033603708, 0.36813186813186816, 0.32517482517482516,
0.4175257731958763, 0.41025641025641024, 0.39408866995073893,
0.4143222506393862, 0.34, 0.391025641025641, 0.3130841121495327,
0.35398230088495575]
и список имен (строк).
Как я могу сделать вероятность как мое значение y каждого бара и имена как значения x?
Ответы
Ответ 1
Если вам нужна гистограмма, вам не нужно прикреплять какие-либо "имена" к значениям x, так как на оси x у вас будут ячейки:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.random.normal(size = 1000)
plt.hist(x, normed=True, bins=30)
plt.ylabel('Probability');
Однако, если у вас ограниченное количество точек данных и вы хотите получить гистограмму, вы можете прикрепить метки к оси x:
x = np.arange(3)
plt.bar(x, height= [1,2,3])
plt.xticks(x+.5, ['a','b','c'])
Дайте мне знать, если это решит вашу проблему.
РЕДАКТИРОВАТЬ 26 ноября 2018
Согласно комментарию ниже, следующего кода будет достаточно для Matplotlib 3.0.2:
x = np.arange(3)
plt.bar(x, height= [1,2,3])
plt.xticks(x, ['a','b','c']) # no need to add .5 anymore
РЕДАКТИРОВАТЬ 23 мая 2019
Что касается гистограммы, normed
параметр устарел:
MatplotlibDeprecationWarning: "нормированный" kwarg устарел в Matplotlib 2.1 и будет удален в 3.1. Вместо этого используйте "плотность".
Итак, начиная с Matplolib 3.1
вместо:
plt.hist(x, normed=True, bins=30)
нужно написать:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.random.normal(size = 1000)
plt.hist(x, density=True, bins=30) # density
plt.ylabel('Probability');
Ответ 2
Если вы еще не установили matplotlib, просто попробуйте команду.
> pip install matplotlib
Импорт библиотеки
import matplotlib.pyplot as plot
Данные гистограммы:
plot.hist(weightList,density=1, bins=20)
plot.axis([50, 110, 0, 0.06])
#axis([xmin,xmax,ymin,ymax])
plot.xlabel('Weight')
plot.ylabel('Probability')
Показать гистограмму
plot.show()
И вывод такой:
Ответ 3
Это очень крутой способ сделать это, но если вы хотите сделать гистограмму, где вы уже знаете значения бина, но не имеете исходных данных, вы можете использовать функцию np.random.randint
для генерации правильного количества значений в пределах диапазона каждого бункера для функции гистограммы для графа, например:
import numpy as np
import matplotlib.pyplot as plt
data = [np.random.randint(0, 9, *desired y value*), np.random.randint(10, 19, *desired y value*), etc..]
plt.hist(data, histtype='stepfilled', bins=[0, 10, etc..])
так как для меток вы можете выровнять x тиков с бункерами, чтобы получить что-то вроде этого:
#The following will align labels to the center of each bar with bin intervals of 10
plt.xticks([5, 15, etc.. ], ['Label 1', 'Label 2', etc.. ])