Показать счетчик в верхней части морского барплота - PullRequest
1 голос
/ 11 марта 2019

У меня есть датафрейм, похожий на:

  User   A       B     C
   ABC   100    121   OPEN
   BCD   200    255   CLOSE
   BCD   500    134   OPEN
   DEF   600    125   CLOSE
   ABC   900    632   OPEN
   ABC   150    875   CLOSE
   DEF   690    146   OPEN

Я пытаюсь отобразить граф в графе «Пользователь». Код выглядит следующим образом:

fig, ax1 = plt.subplots(figsize=(20,10))
graph = sns.countplot(ax=ax1,x='User', data=df)
graph.set_xticklabels(graph.get_xticklabels(),rotation=90)
for p in graph.patches:
    height = p.get_height()
    graph.text(p.get_x()+p.get_width()/2., height + 0.1,
        'Hello',ha="center")

Вывод выглядит так:

enter image description here

Однако я хочу заменить строку «Hello» на value_counts столбца «User». Когда я добавляю код для добавления метки на график:

for p in graph.patches:
    height = p.get_height()
    graph.text(p.get_x()+p.get_width()/2., height + 0.1,
        df['User'].value_counts(),ha="center")

Я получаю вывод как:

enter image description here

1 Ответ

1 голос
/ 11 марта 2019

df ['User']. Value_counts () вернет серию, содержащую количество уникальных значений столбца User.

Не анализируя подробно ваш код, вы можете исправитьэто путем индексации результата value_counts со счетчиком:

fig, ax1 = plt.subplots(figsize=(20,10))
graph = sns.countplot(ax=ax1,x='User', data=df)
graph.set_xticklabels(graph.get_xticklabels(),rotation=90)
i=0
for p in graph.patches:
    height = p.get_height()
    graph.text(p.get_x()+p.get_width()/2., height + 0.1,
        df['User'].value_counts()[i],ha="center")
    i += 1

С вашими образцами данных, получается следующий график:

enter image description here

Как подсказывает @ImportanceOfBeingErnest, следующий код создает тот же вывод с более простым кодом, используя саму переменную высоты вместо индексированного значения_counts:

fig, ax1 = plt.subplots(figsize=(20,10))
graph = sns.countplot(ax=ax1,x='User', data=df)
graph.set_xticklabels(graph.get_xticklabels(),rotation=90)
for p in graph.patches:
    height = p.get_height()
    graph.text(p.get_x()+p.get_width()/2., height + 0.1,height ,ha="center")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...