Добавить значение высоты стержня и недостающее значение на гистограммах - PullRequest
1 голос
/ 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

Вот мой код, который отображает гистограммы, но я хотел бы включить отсутствующие значения и значение высоты бара.

import numpy as np
import matplotlib.pyplot as plt

df.set_index('periodname', inplace=True)
grouped = df.groupby('Hospital_name')

ncols=2
nrows = int(np.ceil(grouped.ngroups/ncols))

fig, axes = plt.subplots(nrows=nrows, ncols=ncols,figsize=(20,50),  constrained_layout=True)

for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
    grouped.get_group(key).plot(kind='bar',ax=ax, title=key)

ax.legend()
plt.show()

Как можно включитьзначение высоты бара, а также включает отсутствующие значения, представленные нулем на гистограммах?

ОЖИДАЕМЫЙ ВЫХОД выглядит примерно так: enter image description here

1 Ответ

0 голосов
/ 30 октября 2019

Вы, вероятно, могли бы просто заменить все свои значения "NAN" на 0 перед построением графика.

for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
    grouped.get_group(key).replace("NAN",0).plot(kind='bar',ax=ax, title=key)

Это должно привести к 4 барам за каждый период.

Обновление

Высота / значения для каждого столбца приведены в answer .

Очень грубо и с проблемами позиционирования этоможет выглядеть примерно так в вашем коде:

fig, axes = plt.subplots(nrows=nrows, ncols=ncols,figsize=(20,50),  constrained_layout=True)

x_offset = 0.02
y_offset = 0.02

for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):

    temp = grouped.get_group(key).replace("NAN",0).plot(kind='bar',ax=ax, title=key)
    for bar in temp.patches:
        b = bar.get_bbox()
        val = "{:+.2f}".format(b.y1 + b.y0)        
        ax.annotate(val, ((b.x0 + b.x1)/2 + x_offset, b.y1 + y_offset))


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