2013-11-15 8 views
2

Мне интересно, существует ли способ построить гистограмму и ogive с использованием matplotlib в Python.Как построить огиб?

У меня есть следующий для построения гистограммы

a = np.array(values) 
plt.hist(a, 32, normed=0, facecolor='blue', alpha = 0.25) 
plt.show() 

Но я не знаю, если Matplotlib получил хороший способ построить в стрельчатом.

Вот что я делаю:

a = np.array(values) 
bins = np.arange(int(min), int(max) + 2) 
histogram = np.histogram(a, bins = bins, normed = True) 
v = [] 
s = 0.0 
for e in histogram[0]: 
    s = s + e 
    v.append(s) 
v[0] = histogram[0][0] 
plt.plot(v) 
plt.show() 

ответ

3

По ogive вы просто означает кумулятивный гистограмму? Если да, просто перейдите cumulative=True в plt.hist.

Например:

import matplotlib.pyplot as plt 
import numpy as np 

data = np.random.normal(0, 1, 1000) 

fig, (ax1, ax2) = plt.subplots(nrows=2) 
ax1.hist(data) 
ax2.hist(data, cumulative=True) 
plt.show() 

enter image description here

Если вы хотите, чтобы это можно сделать в виде линии, просто используйте numpy.histogram непосредственно (это то, что plt.hist использует). В качестве альтернативы вы можете использовать значения, возвращаемые plt.hist. counts и bins - это то, что вернет np.histogram; plt.hist просто возвращает также нанесенные участки.

Например:

import matplotlib.pyplot as plt 
import numpy as np 

data = np.random.normal(0, 1, 1000) 

fig, ax = plt.subplots() 
counts, bins, patches = plt.hist(data) 

bin_centers = np.mean(zip(bins[:-1], bins[1:]), axis=1) 
ax.plot(bin_centers, counts.cumsum(), 'ro-') 

plt.show() 

enter image description here

+0

Великий ответ! Очень полезно! – FacundoGFlores

+0

@FacundoGFlores - Спасибо! –

1

вопрос в его нынешнем виде является довольно расплывчатым. Являются ли шкалы x и y одинаковыми или разными? Предполагая равную шкалу x, она должна быть довольно простой. Обратите внимание, что, так как вы не представили каких-либо данных, я не проверял этот код

import numpy as np 
import matplotlib.pyplot as plt 

fig, ax1 = plt.subplots() 
ax2 = ax1.twinx() 

ax1.hist(values, 32, normed=0, facecolor='blue', alpha=0.25) 
ax2.plot(x_ogive, y_ogive, marker='none', linestyle='-', color='black') 

ax1.set_xlabel('X-data') 
ax1.set_ylabel('Counts') 
ax2.set_ylabel('Ogive Surface') 

fig.savefig('OgiveAndHist.png')