Хотелось бы что-нибудь подобное для вас? Я знаю, что это много изменений, и это не совсем соответствует моему комментарию, но я так и нашел. Я также понимаю, что вам, возможно, придется немного подправить, чтобы учесть все дополнительные даты, которые у вас есть.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
data = {'Name': ['Jootrh Hospital', 'Jootrh Hospital',
'Embu Hospital', 'Embu Hospital',
'Bungoma Hospital', 'Bungoma Hospital',
'Keru Hospital', 'Keru Hospital'],
'Date': ['18-Jul', '18-Aug', '18-Jul', '18-Aug', '18-Jul', '18-Aug',
'18-Jul', '18-Aug'],
'Norm_Del': [452, 458, np.nan, 45, 498, 466, np.nan, 450],
'Caesa_Sec': [67., 99., 13., 13., 60., 19., 73., np.nan],
'Br_Del': [10., np.nan, 13., 137., 100., np.nan, np.nan, 197.],
'Ass_VD': [np.nan, np.nan, 1., 37., 1., np.nan, 1., 37.]}
df = pd.DataFrame(data)
df2 = df.pivot_table(
values=['Norm_Del', 'Caesa_Sec', 'Br_Del', 'Ass_VD'],
index=['Name', 'Date'], fill_value=0)
df2.plot.bar(rot=45, figsize=(16, 8),
color=['xkcd:cerulean', 'xkcd:avocado', 'xkcd:silver',
'xkcd:purple'])
i = 0
for unused, rows in df2.iterrows():
print(rows['Norm_Del'])
plt.annotate(rows['Ass_VD'], xy=(i - 0.19, rows['Ass_VD'] + 5), rotation=0,
color='xkcd:cerulean', fontweight='semibold', ha='center')
plt.annotate(rows['Br_Del'], xy=(i - 0.06, rows['Br_Del'] + 5), rotation=0,
color='xkcd:avocado', fontweight='semibold', ha='center')
plt.annotate(rows['Caesa_Sec'], xy=(i + 0.06, rows['Caesa_Sec'] + 5),
rotation=0, color='xkcd:silver', fontweight='semibold',
ha='center')
plt.annotate(rows['Norm_Del'], xy=(i + 0.19, rows['Norm_Del'] + 5),
rotation=0, color='xkcd:purple', fontweight='semibold',
ha='center')
i += 1
plt.savefig('so.png', bbox_inches='tight')
plt.show()
РЕДАКТИРОВАТЬ:
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
data = {'Name': ['Jootrh Hospital', 'Jootrh Hospital',
'Embu Hospital', 'Embu Hospital',
'Bungoma Hospital', 'Bungoma Hospital',
'Keru Hospital', 'Keru Hospital'],
'Date': ['18-Jul', '18-Aug', '18-Jul', '18-Aug', '18-Jul', '18-Aug',
'18-Jul', '18-Aug'],
'Norm_Del': [452, 458, np.nan, 45, 498, 466, np.nan, 450],
'Caesa_Sec': [67., 99., 13., 13., 60., 19., 73., np.nan],
'Br_Del': [10., np.nan, 13., 137., 100., np.nan, np.nan, 197.],
'Ass_VD': [np.nan, np.nan, 1., 37., 1., np.nan, 1., 37.]}
df = pd.DataFrame(data)
df2 = df.pivot_table(
values=['Norm_Del', 'Caesa_Sec', 'Br_Del', 'Ass_VD'],
index=['Name', 'Date'], fill_value=0)
names = np.unique([x[0] for x in df2.index.values])
dates = sorted(np.unique([x[1] for x in df2.index.values]),
key=lambda day: datetime.strptime(day, '%d-%b'))
values = df2.columns.values
locLab = [-0.19, -0.06, 0.06, 0.19]
colors = ('xkcd:cerulean', 'xkcd:avocado', 'xkcd:silver', 'xkcd:purple')
fig, axs = plt.subplots(nrows=names.shape[0], figsize=(5 * len(dates),
4 * names.shape[0]))
i = 0
for name in names:
df2.loc[name].reindex(dates).plot.bar(
rot=0, ax=axs[i], title=name, color=colors)
j = 0
for date in dates:
k = 0
maxVal = np.amax(df2.loc[name].values)
for value in values:
val = df2.loc[name].loc[date][value]
axs[i].annotate(val, xy=(j + locLab[k], val + maxVal / 100),
color=colors[k], fontweight='semibold',
ha='center')
k += 1
j += 1
i += 1
plt.tight_layout()
plt.savefig('so.png', bbox_inches='tight')