根据分组值绘制条形图

时间:2019-10-30 11:09:00

标签: python matplotlib

我想绘制条形图,显示条形高度,通过在缺少值的位置显示零来在图上包含丢失的数据,并且应该基于groupby选项单独显示图形。我有医院的数据,我想自己绘制每个医院的图表,然后对输出进行方面分析,以条形式组织条形图。这是我的数据:

# 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

现在,我已按医院名称将数据分组,并使用period_name作为索引,并绘制了输出图,但是问题是我无法获得钢筋高度数字,并且图中未显示缺失值(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()

如何绘制每个医院的期间名称的条形图?

0 个答案:

没有答案