2 гистограммы на 1 графике matplotlib

Почему не удается создать 2 графика? Код:

g1 = df_common['Уникальные пользователи']
g2 = df_common['Создано']
freq_series1 = pd.Series(g1)
freq_series2 = pd.Series(g2)
y_labels = df_common['Приложение доступа']
plt.figure(figsize=(12, 8))
ax1 = freq_series1.plot.barh()
ax2 = freq_series2.plot(kind='barh')
ax2.set_yticklabels(y_labels)
ax2.set_xlim(-40, 9000)
for rect in rects1:
    x_value = rect.get_width()
    y_value = rect.get_y() + rect.get_height() / 2
    space = 5
    ha = 'left'
    label = "{:.0f}".format(x_value)
    plt.annotate(
        label,                      # Use `label` as label
        (x_value, y_value),         # Place label at end of the bar
        xytext=(space, 0),          # Horizontally shift label by `space`
        textcoords="offset points", # Interpret `xytext` as offset in points
        va='center',                # Vertically center label
        ha=ha)                      # Horizontally align label differently for
                                    # positive and negative values.
for rect in rects2:
    x_value = rect.get_width()
    y_value = rect.get_y() + rect.get_height() / 2
    space = 5
    ha = 'left'
    label = "{:.0f}".format(x_value)
    plt.annotate(
        label,                      # Use `label` as label
        (x_value, y_value),         # Place label at end of the bar
        xytext=(space, 0),          # Horizontally shift label by `space`
        textcoords="offset points", # Interpret `xytext` as offset in points
        va='center',                # Vertically center label
        ha=ha)                      # Horizontally align label differently for
                                    # positive and negative values.

Пример DataFrame:

Приложение доступа Уникальные пользователи Создано
iOS                 100                       10
Android             50                        5

То есть нужен примерно такой график, но с подписанными значениями столбцов (загрузить картинку не удается): https://pyprog.pro/mpl/image/bar/bar_offset_and_width.jpg


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

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

Не понимаю, что значит "не удается создать два графика"? График-то у вас один, только данных вы выводите несколько - на примере iOS и Andriod. Надеюсь, я все расшифровал правильно. В общем, если вы хотите работать именно через датафрейм - а я так понял из вашего недоговоренного вопроса - и получить график, подобный образцу, то я бы это делал так:

g1 = [100,50]
g2 = [10,5]
y_labels = ['iOS','Android']
df = pd.DataFrame({'Уникальные пользователи': g1,
                   'Создано':g2}, index=y_labels)
plt.figure(figsize=(12, 8))
ax = df.plot.bar()
for r in ax.patches:
     height = r.get_height()
     ax.annotate('{}'.format(height),
                 xy=(r.get_x() + r.get_width() / 2, height),
                 xytext=(0, 3),  
                 textcoords="offset points",
                 ha='center', 
                 va='bottom')

Получаем: введите сюда описание изображения

→ Ссылка