Matplotlib Annotate с использованием значений из DataFrame - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь аннотировать диаграмму, чтобы включить нанесенные значения оси X, а также дополнительную информацию из DataFrame. Я могу аннотировать значения по оси X, но не уверен, как добавить дополнительную информацию из фрейма данных. В моем примере ниже я аннотирую ось X, которая является значениями из столбца Завершение , но также хочу добавить значения Завершено и Участники из DataFrame. ,

Например, Выполняется Завершение составляет 20%, но я хочу, чтобы в моей аннотации отображались значения Завершено и Участники в формате - 20% (2/10). Ниже приведен пример кода, который может воспроизвести мой сценарий, а также текущие и желаемые результаты. Любая помощь приветствуется.

Код:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

mydict = {
    'Event': ['Running', 'Swimming', 'Biking', 'Hiking'],
    'Completed': [2, 4, 3, 7],
    'Participants': [10, 20, 35, 10]}

df = pd.DataFrame(mydict).set_index('Event')
df = df.assign(Completion=(df.Completed/df.Participants) * 100)
print(df)

plt.subplots(figsize=(5, 3))
ax = sns.barplot(x=df.Completion, y=df.index, color="cyan", orient='h')

for i in ax.patches:
    ax.text(i.get_width() + .4,
            i.get_y() + .67,
            str(round((i.get_width()), 2)) + '%', fontsize=10)

plt.tight_layout()
plt.show()

DataFrame:

          Completed  Participants  Completion
Event                                        
Running           2            10   20.000000
Swimming          4            20   20.000000
Biking            3            35    8.571429
Hiking            7            10   70.000000

Токовый выход:

enter image description here

Требуемый выход:

enter image description here

1 Ответ

1 голос
/ 27 апреля 2020

L oop через столбцы Completed и Participants, а также при аннотировании:

for (c,p), i in zip(df[["Completed","Participants"]].values, ax.patches):
    ax.text(i.get_width() + .4,
            i.get_y() + .67,
            str(round((i.get_width()), 2)) + '%' + f" ({c}/{p})", fontsize=10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...