2016-11-04 2 views
1

я следующие пандами dataframe df:Создание кумулятивного распределения гистограммы для данных данных

Bin Cum_val 
0 0 0.39 
1 1 0.63 
2 2 0.76 
3 3 1.00 

Я хочу, чтобы построить график кумулятивной распределения histagram (ступенчато), который будет иметь Bin значение по оси X, и Cum_val значений по оси Y.

Я попробовал этот подход (как с cumulative=True и cumulative=False, поскольку мои данные уже нарастающим итогом), но я получаю Cum_val значения по оси X, а не на оси Y:

n, bins, patches = plt.hist(x=df.ix[:,1], normed=True, 
          histtype='step', cumulative=True) 

plt.grid(True) 
plt.ylim(0, 1.05) 
plt.title('cumulative step') 

plt.show() 

Как решить эту проблему ?

ответ

0

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

В этом смысле matplotlib ведет себя правильно: в вашем массиве 0.39, 0.63, 0.76, 1.00 каждое значение происходит ровно один раз. Если вы назовете
plt.hist(x=[0.39, 0.63, 0.76, 1.00], normed=True, cumulative=False)
без аргумента bins, четыре значения будут распределены между 10 бункерами по умолчанию, создавая полосы равной высоты на графике.

Я могу только догадываться о том, что вы на самом деле пытаетесь достичь - и это было бы создать простой бар график значений, как этот

import matplotlib.pyplot as plt 
import numpy as np 

data = np.array([[0,1,2,3],[0.39, 0.63, 0.76, 1.00]]).T 
plt.bar(data[:,0], data[:,1], 1, tick_label=data[:,0], align="center") 
plt.ylim(0, 1.05) 
plt.title('cumulative step') 

plt.show() 
Смежные вопросы