2016-03-24 2 views
1

Я использую matplotlib для создания гистограммы.Ручная диаграмма гистограммы в python

В принципе, мне интересно, есть ли способ вручную установить бункеры, а также их значения, и получить результат так, как если бы график был сделан моей гистограммой matplotlin. Ниже приведены мои бункеры и их соответствующее значение.

0-7  0.9375 
7-13 0.9490740741 
13-18 0.8285714286 
18-28 0.880952381 
28-37 0.92164903 
37-48 0.9345357019 
48-112 0.9400368773 

Это штрих-код я реализовал

import matplotlib.pyplot as plt 
plt.bar(maxlist, mean) 
plt.show() 

maxlist = [7.0, 13.0, 18.0, 28.0, 37.0, 48.0, 112.0] 
mean = [0.9375, 0.94907407407777766, 0.82857142858571442, 0.88095238094999995, 0.92164902996666676, 0.93453570191250002, 0.94003687729000018] 

Это то, что бар участок коды выше выглядит. histwithoutwidth

Я также пробовал играть с параметром ширины, но в этом случае панель перекрывается, что не происходит на гистограмме.

import matplotlib.pyplot as plt 
plt.bar(maxlist, mean,width = 6) 
plt.show() 

enter image description here

Что я хочу есть бар участок, чтобы выглядеть как гистограмма, как показано ниже, без каких-либо накладок. Любой, кто имеет какие-либо идеи, как это сделать в ноутбуке python/ipython. enter image description here

+0

, так что вы хотите, чтобы бары были одинаковой ширины, но база их не равна ширине? или вы используете некоторые из баров, чтобы они были более широкими, чтобы заполнить пробелы? – maxymoo

+0

Бутылки позволяют вам давать очень специфические бункеры, передавая список. На дисплей не влияет. Для этого посмотрите на 'histtype',' align' и 'rwidth' в отличной документации: http://matplotlib.org/api/pyplot_api.html. – roadrunner66

+0

@maxymoo Я хочу, чтобы бары одинаковой длины, без необходимости их перекрытия друг с другом. База не может быть одинаковой длины, так как диапазон бункеров различается каждый раз. Надеюсь, это прояснит ваши сомнения. – piyush

ответ

3

Из документации, связанной с помощью @ roadrunner66,

matplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

Сделать бар участок с прямоугольниками ограничен:

left, left + width, bottom, bottom + height

(слева , правый, нижний и верхний края)

Первый параметр, переданный в bar, фактически является левым краем вашего «бункера». Похоже, что maxlist, который вы проходите как left, на самом деле является правым краем ваших бункеров, который отбрасывает все, и ваши ширины становятся странными.

import matplotlib.pyplot as plt 
import numpy as np 
x1=[0,7,13,18,28,37,48] #left edge 
x2=x1[1::]+[112] #right edge 
y=[0.9375, 0.94907407407777766, 0.82857142858571442, 0.88095238094999995, 0.92164902996666676, 0.93453570191250002, 0.94003687729000018] 
w=np.array(x2)-np.array(x1) #variable width, can set this as a scalar also 
plt.plot(x1,y,width=w) 
plt.show() 

Bar chart with variable bin widths

В баре ширины являются репрезентативными расстояний между левым и правым краями, x1 и x2. Если вы хотите постоянной ширины, просто перейдите width=w_scalar в plt.bar(), где w_scalar - это ваша постоянная ширина бункера. Если вы хотите, чтобы бары были дальше друг от друга, просто сделайте width меньше.

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

  • Нет связанных вопросов^_^