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')
