2015-02-07 2 views
0

Я написал следующую программу в python для получения гистограмм equi-width. Но когда я рисую его, я получаю одну строчку фигуры вместо гистограммы. Может кто-то, пожалуйста, помогите мне выяснить, где я иду не так.Гистограмма построения в python

import numpy as np 
import matplotlib.pyplot as plt 

for num in range(0,5): 
    hist, bin_edges = np.histogram([1000, 98,99992,8474,95757,958574,97363,97463,1,4,5], bins = 5) 
    plt.bar(bin_edges[:-1], hist, width = 1000) 
    plt.xlim(min(bin_edges), max(bin_edges)) 
    plt.show() 

Кроме того, я хочу, чтобы пометить каждый участок, полученный с его «NUM» value..which диапазон от 0 до 5. В приведенном выше примере, хотя я держал мои данные постоянно, но я намерен изменить данные для разных значений "num".

ответ

1

Посмотрите на свой бункер края:

>>> bin_edges 
array([ 1.00000000e+00, 1.91715600e+05, 3.83430200e+05, 
     5.75144800e+05, 7.66859400e+05, 9.58574000e+05]) 

ваших бинов позиций в диапазоне от 1 до примерно 1 млн, но вы только дали бруски шириной 1000. ваших баров, где они существуют вообще, слишком тощий, чтобы его видели. Кроме того, большинство баров имеют высоту серологический, потому что большинство из бункеров пустуют:

>>> hist 
array([10, 0, 0, 0, 1]) 

«линии» вы видите последний ящик, с одним элементом. Этот бункер охватывает промежуток примерно 200000, но ширина штанги составляет всего 1000, поэтому он очень тонкий по отношению к количеству пространства, которое он должен покрывать. Здесь также находится полоса высот 10, но она также очень тощая и застряла на левом краю сюжета, поэтому она практически невидима.

Не имеет смысла пытаться использовать полосы постоянной ширины, а также размещать их в координатах x, соответствующих их размеру. Поставив столбцы в эти x-координаты, вы уже размещаете их пропорционально ширине бункера; заставляя бары skinnier не приближать их ближе, это просто делает их невидимыми.

Если вы хотите использовать полосы постоянной ширины, вы должны поместить их в последовательные положения X и использовать ярлыки на оси, чтобы показать значения, представляемые бункерами. Вот простой пример с вашими данными:

plt.bar(np.arange(len(bin_edges)-1), hist, width=1) 
plt.xticks((np.arange(len(bin_edges))-0.5)[1:], bin_edges[:-1]) 

enter image description here

Вы должны решить, как вы хотите форматировать эти метки.

Смежные вопросы