2016-09-17 2 views
2

Я пытаюсь построить гистограмму с му и сигмой.Построение гистограммы

Я пытаюсь использовать значения ec_scores на оси y, чтобы показать мне 0,1 до 1,0 Это дает мне 1, 2, 3, 4, 5, 6 по оси y. Я не получаю никаких ошибок, но это полностью отбрасывает график. Пожалуйста, помогите мне и скажите мне, что я делаю неправильно, и как я могу получить график, который будет сгенерирован должным образом. Спасибо.

Это мой код:

import numpy as np 

import matplotlib.pyplot as plt 

import matplotlib.mlab as mlab 

x = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]) 

ec_scores = np.array([1., 1., 1., 0.95923677, 0.94796184, 1., 0.76669558, 1., 0.99913194, 1.]) 

mu, sigma = (np.mean(ec_scores), np.std(ec_scores)) 


fig = plt.figure() 

ax = fig.add_subplot(111) 

n, bins, patches = ax.hist(x, 50, normed=1, facecolor='blue', alpha=0.75) 


bincenters = 0.5*(bins[1:]+bins[:-1]) 

y = mlab.normpdf(bincenters, mu, sigma) 

l = ax.plot(bincenters, y, 'r--', linewidth=1) 

ax.set_xlabel('Parameters') 

ax.set_ylabel('EC scores ') 

plt.plot(x, ec_scores) 

ax.grid(True) 

plt.show() 

В настоящее время график выглядит следующим образом: enter image description here

+2

гистограммы, по определению, отображают «отсчеты» по оси y. кажется, вам нужны вероятности, а это значит, что вы хотите использовать функцию barplot, а не функцию гистограммы. – benten

+0

@benten Это совсем не так. построение гистограммы вполне допустимо. Я думаю, что OP ищет «нормированный» kwarg (см. Http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.hist или https://stackoverflow.com/questions/5498008/pylab- histdata-normed-1-normalization-кажется-to-work-wrong) – tacaswell

+0

Я стою исправлено. [Из википедии] (https://en.wikipedia.org/wiki/Histogram) «Гистограмма также может быть нормализована при отображении относительных частот». Кроме того, гистограммы предпочтительны для категориальных данных, тогда как гистограммы являются предпочтительными для непрерывных данных. С точки зрения matplotlib вы можете сгенерировать одну и ту же картинку, но все равно интересно. Спасибо, tacaswell. – benten

ответ

1

Как отметил @benton в комментариях, вы можете построить на ec_scores как barchart:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]) 
ec_scores = np.array([1., 1., 1., 0.95923677, 0.94796184, 1., 0.76669558, 1., 0.99913194, 1.]) 
mu, sigma = (np.mean(ec_scores), np.std(ec_scores)) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
rects = ax.bar(x, ec_scores, width=0.1, align='center', facecolor='blue', alpha=0.75) 

ax.set_xlabel('Parameters') 
ax.set_ylabel('EC scores ') 
ax.grid(True) 

plt.show() 

Это будет выглядеть так: Plotted as a barplot.

Вы также можете добавить бары ошибок, передав массив в параметр yerr. Это проиллюстрировано в приведенном выше примере барчарта I. Я не уверен, что именно вы пытаетесь сделать с normpdf, но barchart возвращает список прямоугольников вместо бункеров, поэтому вам может понадобиться адаптировать их к вашему коду.

Надеюсь, это поможет.