Как построить гистограмму с использованием 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');

enter image description here

Однако, если у вас ограниченное количество точек данных и вы хотите получить гистограмму, вы можете прикрепить метки к оси x:

x = np.arange(3)
plt.bar(x, height= [1,2,3])
plt.xticks(x+.5, ['a','b','c'])

enter image description here

Дайте мне знать, если это решит вашу проблему.

РЕДАКТИРОВАТЬ 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');

enter image description here

Ответ 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()

И вывод такой:

enter image description here

Ответ 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.. ])