Несколько вертикальных баров с подписями на одном графике

Вот какая история. Есть табличка в которой есть мужчины и женщины и известно сколько было тех и других и сколько раз те и другие совершили некоторое действие (послушали музыку в данном случае). Нужно вывести это все в один график (как на картинке). Желательно с подписями значения каждого бара. введите сюда описание изображения Для какого-то одного признака делаю так:

plt.figure(figsize=(12,7), dpi= 80)
plt.bar(df_gender['gender'], df_gender['consumer_id'], color='skyblue', width=.25)
for i, val in enumerate(df_gender['consumer_id'].values):
    plt.text(i, val, int(val), horizontalalignment='center', verticalalignment='bottom', rotation=00, fontdict={'fontweight':700, 'size':25})
plt.gca().set_xticklabels(df_gender['gender'], rotation=0, horizontalalignment= 'right')
plt.ylim(0, 5500)
plt.show()

Но сразу оба - никак не получается :( И надпись, если честно НАД баром - не очень красиво... можно ли сделать внутри бара (как на картинке)?


Ответы (1 шт):

Автор решения: passant

Вы не привели свои данные, и можно только догадываться, как они там у вас организованы. Поэтому если я не угадал, то подпиливать код вам придется самому.

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df=pd.DataFrame({'Пол':['f','m'],'Количество': [3865,2489],'Стримы':[5146,3223]})
x = np.array(df.index.tolist())
width = 0.35  
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, df.Количество, width, label='Количество')
rects2 = ax.bar(x + width/2, df.Стримы, width, label='Стримы')
ax.set_xticks(x)
ax.set_xticklabels(df.Пол)
ax.legend()
ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)
fig.tight_layout()

Результат:введите сюда описание изображения

И главное, не забудьте установить версию matplotlib 3.4.3

→ Ссылка