Как центрировать аннотацию гистограммы по горизонтали? - PullRequest
0 голосов
/ 01 августа 2020

Я создаю гистограмму вроде этого:

gender = ['M', 'F']
numbers = [males,females]
bars = plt.bar(gender, numbers, width=0.1, bottom=None, align='center', data=None)
for i in range(len(numbers)):
    plt.annotate(str(numbers[i]), xy=(gender[i],numbers[i]))
plt.show()

Я хочу использовать plt.annotate, чтобы записать точное значение в верхней части столбца. Однако значение печатается с правой стороны. Можно ли переместить в центр?

да

1 Ответ

1 голос
/ 02 августа 2020
  • Чтобы указать горизонтальное выравнивание аннотации, используйте параметр ha
  • Согласно предложению Johan C
    • Уловка состоит в том, чтобы использовать f'{value}\n' в качестве строки и неизмененное value (или numbers) в качестве позиции y вместе с va='center'.
    • Это также работает с plt.text . В качестве альтернативы plt.annotation принимает смещение в «точках» или «пикселях».

Вариант 1

  • От lists значений & категории
import matplotlib.pyplot as plt

gender = ['M', 'F']
numbers = [1644, 1771]

plt.figure(figsize=(12, 6))
bars = plt.bar(gender, numbers, width=0.1, bottom=None, align='center', data=None)
for i in range(len(numbers)):
    plt.annotate(f'{numbers[i]}\n', xy=(gender[i], numbers[i]), ha='center', va='center')

Вариант 2

  • От pandas.DataFrame
  • Использовать pandas.DataFrame.iterrows, чтобы извлечь места x и y, необходимые для аннотаций.
    • x - категориальное 'gender' значение
    • y - числовое c 'value'
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'value': [1771, 1644], 'gender': ['F', 'M']})

plt.figure(figsize=(12, 6))
bars = plt.bar(df.gender, df.value, width=0.1, bottom=None, align='center', data=None)
for idx, (value, gender) in df.iterrows():
    plt.annotate(f'{value}\n', xy=(gender, value), ha='center', va='center')

Вывод графика

введите описание изображения здесь

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