Построение гистограммы на матплотлиб - PullRequest
1 голос
/ 03 ноября 2019

Как мне построить горизонтальную гистограмму со значениями в конце бара, Что-то похожее на this

Я пробовал это

plt.barh(inc.index,inc)
plt.yticks(inc.index)
plt.xticks(inc);
plt.xlabel("Order Count")
plt.ylabel("Date")

Гистограмма

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Чтобы создать график с наложенными значениями, запустите:

ax = inc.plot.barh(xticks=inc, xlim=(0, 40));
ax.set_xlabel('Order Count')
ax.set_ylabel('Date')
for p in ax.patches:
    w = p.get_width()
    ax.annotate(f' {w}', (w + 0.1, p.get_y() + 0.1))

Обратите внимание, что я установил xlim с верхним пределом, немного превышающим максимальный Количество заказов , чтобыпредоставьте место для аннотаций.

Для подмножества ваших данных я получил:

enter image description here

И еще одно улучшение:

Как я вижу, ваши данные представляют собой Series с DatetimeIndex .

Так что, если вы хотите, чтобы значения метки y были только для дат (без 00: 00: 00 для часов), конвертируйте индекс в string :

inc.index = inc.index.strftime('%Y-%m-%d')

, как я, создавая свой график.

0 голосов
/ 03 ноября 2019

Ответ можно найти здесь: Как отобразить значение бара на каждом баре с помощью pyplot.barh ()?

Просто добавьте цикл for, как сказал cphlewis:

for i, v in enumerate(inc):
    ax.text(v + 3, i + .25, str(v), color='blue', fontweight='bold')
plt.show()

Вот код, который я пробовал для вашей ситуации:

import matplotlib.pyplot as plt
import numpy as np
inc = [12, 25, 50, 65, 40, 45]
index = ["2019-10-31", "2019-10-30", "2019-10-29", "2019-10-28", "2019-10-27", "2019-10-26"]

fig, ax = plt.subplots()
ax.barh(index,inc, color='black')
plt.yticks(index)
plt.xticks(inc);
plt.xlabel("Order Count")
plt.ylabel("Date")

# Set xticks
plt.xticks(np.arange(0, max(inc)+15, step=10))

# Loop for showing inc numbers in the end of bar
for i, v in enumerate(inc):
    ax.text(v + 1, i, str(v), color='black', fontweight='bold')
plt.show()

График выглядит так: enter image description here

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