Как добавить метки на горизонтальную гистограмму в Matplotlib? - PullRequest
0 голосов
/ 13 февраля 2020

как добавить метки на горизонтальную гистограмму в matplotlib?

Привет всем, я matplotlib и python newb ie, и я хотел снова задать этот вопрос, чтобы получить немного помогите узнать, есть ли более простые способы добавить метки для счетчика, представленного каждым столбцом, чем текущие решения, которые я нашел.

Вот код, который я написал:

from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 24), dpi=80, facecolor='w', edgecolor='k')
df['Name'].value_counts()[:80].plot(kind='barh')

Он работает просто отлично, за исключением отображения меток рядом с битом баров ...

Я посмотрел здесь, как добавить метку, и поэтому я изменил свой код на это:

x = df['Name']
y = df['Name'].value_counts(ascending=True)
fig, ax = plt.subplots(figsize=(18,20))    
width = 0.75 # the width of the bars 
ind = np.arange(len(y))  # the x locations for the groups
ax.barh(ind, y, width, color="blue")
ax.set_yticks(ind+width/2)
ax.set_yticklabels(y, minor=False)
plt.title('Count of supplies')
plt.xlabel('Count')
plt.ylabel('ylabel')

for i, v in enumerate(y):
    ax.text(v + 100, i + 0, str(v), color='black', fontweight='bold')

Тем не менее, теперь мои имена не связаны со столбцами, они расположены в том же порядке, что и в кадре данных. Есть ли способ просто изменить первый код или сделать так, чтобы имена, связанные со столбцами, были правильными во 2-й попытке (сгруппированы по столбцу, который они помечают ...)?

Сортировка изображений, объясняющая мою проблему: Image sorta explaining my issue:

1 Ответ

0 голосов
/ 13 февраля 2020

(Это не совсем ответ, так как на него уже дан ответ в комментариях. Просто показываю, как это выглядит.)

Используя индекс y в качестве индекса графика барха, следует поставить y -метки на правильном месте, рядом с соответствующим баром. Там нет необходимости манипулировать Y-Ticklabels. Метки столбцов можно выровнять по центру и выровнять по левому краю. Правый x-предел можно немного сдвинуть, чтобы освободить место для метки самого длинного бара.

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame({'Name': np.random.choice(list('AABBBBBCCCCCDEEF'), 20000)})
y = df['Name'].value_counts(ascending=False)
fig, ax = plt.subplots(figsize=(12,5))
ax.barh(y.index, y, height=0.75, color="slateblue")
plt.title('Count of supplies')
plt.xlabel('Count')
plt.ylabel('ylabel')
_, xmax = plt.xlim()
plt.xlim(0, xmax+300)
for i, v in enumerate(y):
    ax.text(v + 100, i, str(v), color='black', fontweight='bold', fontsize=14, ha='left', va='center')
plt.show()

sample plot

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