Гистограмма на основе сгруппированных значений - PullRequest
0 голосов
/ 30 октября 2019

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

# intialise data of lists. 
data = {'Hospital_name':['Jootrh Hospital', 'Jootrh Hospital', 'Embu Hospital', 'Embu Hospital','Bungoma Hospital', 'Bungoma Hospital', 'Keru Hospital', 'Keru Hospital'], 
        'periodname':["18-Jul", "18-Aug", "18-Jul", "18-Aug","18-Jul", "18-Aug", "18-Jul", "18-Aug"], 'normal deliveries':[452, 458, "NAN", 45,498, 466, "NAN", 450],
       'caesarian sections':[67.0, 99.0, 13.0, 13.0,60.0, 19.0, 73.0, "NAN"], 'breach delivery':[10.0, "NAN", 13.0, 137.0,100.0, "NAN", "NAN" ,197.0],
       'assisted vd':["NAN", "NAN", 1.0, 37.0,1.0, "NAN", 1.0, 37.0]}


# Create DataFrame 
df = pd.DataFrame(data) 
df

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

#group data
df.set_index('periodname', inplace=True)
df = pd.DataFrame(df).groupby(['periodname','Hospital_name'])[['normal deliveries','caesarian sections','breach delivery','assisted vd']].agg({'normal deliveries': 'sum', 'caesarian sections': 'sum', 'breach delivery':'sum', 'assisted vd':'sum'})

df=df[['normal deliveries','caesarian sections','breach delivery','assisted vd']].apply(pd.to_numeric,errors='coerce')


df1 = df.pivot_table(index = 'periodname', values = ['normal deliveries','caesarian sections','breach delivery','assisted vd'], columns = 'Hospital_name').fillna(0)

import matplotlib.pyplot as plt
%matplotlib inline

for i,col in enumerate(df1.columns[1:]):
    bars= plt.bar([x+i*0.3 for x in list(df1.index)], df1[col], width = 0.3, label = col)

    for bar in bars:
        plt.gca().text(bar.get_x() + bar.get_width()/2, bar.get_height() - 5, str(int(bar.get_height())),ha='center', color='w', fontsize=11)

plt.xticks(list(df1.index), df1['periodname'])
plt.legend()

Как построить гистограмму названия периода для каждой больницы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...