Как аннотировать гистограмму в matplotlib со скобкой - PullRequest
1 голос
/ 02 мая 2020

Я хочу поместить скобку над частью моих данных в гистограмме, чтобы она выглядела как на рисунке ниже. Может кто-нибудь показать мне, как это сделать с моим кодом?

Возрастные демографические данные c размеры населения Великобритании

import pandas as pd
import matplotlib.pyplot as plt

#reads CSV raw file on github
df = pd.read_csv ("https://raw.githubusercontent.com/ryan-j-hope/Shielding-models/master/2020%20Uk%20Population%20By%20Age%20Demographics.csv", encoding='UTF')

#removes row 10
df.drop(10,inplace = True)

print(df)

#plots and lables chart
ag = df["Age Group"]

pop = df["Population (%)"]

plt.ylabel("Population (%)")

plt.xlabel("Age Group")

plt.bar(ag, pop)

plt.show()

1 Ответ

1 голос
/ 02 мая 2020

max(pop[-4:]) вычисляет вертикальное положение для начала скобки как максимум задействованных стержней. С адекватными x и y координатами можно нарисовать полную скобку.

Среднее значение положения столбцов можно использовать в качестве x-координаты для текста.

import matplotlib.pyplot as plt

ag = ['0', '10', '20', '30', '40', '50', '60', '70', '80', '90']
pop = [12, 11, 13, 14, 13, 14, 11, 9, 4, 1]
plt.ylabel("Population (%)")
plt.xlabel("Age Group")
plt.bar(ag, pop)

index1 = 6
index2 = 9
h = max(pop[index1:index2+1]) # maximum of the involved bar heights
bx = [index1-0.5, index1-0.5, index2+0.5, index2+0.5]
by = [h + 0.5, h + 1, h + 1, h + 0.5]
plt.plot(bx, by, 'k-', lw=2)
plt.text((index1 + index2) / 2, h + 1.5, f'{sum(pop[index1:index2+1]):.0f} %', size=20, ha='center', va='bottom')

plt.show()

example plot

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