2016-04-18 3 views
0

У меня есть гистограмма, которые выглядят так: enter image description hereКак построить среднюю гистограмму данных в python?

Вы видите, за каждый год (X) есть несколько Y, поэтому гистограмма перекрывающихся полос. Как я могу построить его только для макс. Y? и для среднего?

Мой код:

My dataframe is: 
    Data Amount 
    1996 65155 
    1984 88705 
    1996 115551 
    2010 87222 
    1995 3043 
    1994 54789 
    2007 87655 
    1996 55189 
    2005 34914 
    2005 122643 
    1995 111700 
    1996 64065 
    1995 76783 
    1994 85687 
    1995 88515 
    1996 48352 
    1995 315025 
    1995 80074 
    1995 133998 
    2000 40918 
    2000 108585 
    1996 119506 
    2003 105385 
    2003 93374 
    1996 63970 
    1995 15261 
    1996 128078 
    1995 83593 
    1994 54544 
    2006 108167 
    1996 141421 
    2005 83725 

year=df[['Year']].as_matrix() 
amount=df[['Amount']].as_matrix() 

stepsize = 10 
fig, ax = plt.subplots() 
ax.bar(year, amount, width=1) 
start, end = ax.get_xlim() 
ax.set_xlabel('Year') 
ax.set_ylabel('Amount') 
ax.set_title(r'Amount - year') 
ax.xaxis.set_ticks(np.arange(start, end, stepsize)) 
plt.show() 
+0

вам нужно сделать воспроизводимый пример (включая код, который генерирует репрезентативные данные с нуля без локальных файлов, подключения к базам данных и т.д.) –

+0

нормально, вопрос редактируется – Polly

+0

Как я уже сказал , «без локальных файлов», вы единственный человек в мире с «Data.csv». –

ответ

0

Поскольку вы читаете данные с пандами, вы можете использовать dataframe сгруппировать данные, совокупность, как вы хотите, и сюжет этих значений. Я использую значение max в примере ниже, но вы также можете использовать mean, min, ... что угодно.

Также обратите внимание, как я использую StringIO, чтобы сделать этот пример полностью скопированным/вставным.

from io import StringIO 
import pandas 

datafile = StringIO("""\ 
Year Amount 
1996 65155 
1984 88705 
1996 115551 
2010 87222 
1995 3043 
1994 54789 
2007 87655 
1996 55189 
2005 34914 
2005 122643 
1995 111700 
1996 64065 
1995 76783 
1994 85687 
1995 88515 
1996 48352 
1995 315025 
1995 80074 
1995 133998 
2000 40918 
2000 108585 
1996 119506 
2003 105385 
2003 93374 
1996 63970 
1995 15261 
1996 128078 
1995 83593 
1994 54544 
2006 108167 
1996 141421 
2005 83725 
""") 

df = pandas.read_csv(datafile, sep='\s+') 
ax = df.groupby(by=['Year']).max().plot.bar(legend=False) 
ax.set_ylabel("Amount") 

enter image description here

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