Matplotlib에서 막대 차트(bar chart)의 각 값을 백분율(%)로 표시하고 싶다면, annotate() 메서드를 활용하면 간단하게 구현할 수 있습니다. 이 글에서는 단계별로 그 과정을 살펴보겠습니다.
구현 단계
그림(figure) 크기를 설정하고, 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
빈도수(frequencies) 리스트를 준비합니다.
plt.figure()로 새 그림을 생성하거나 기존 그림을 활성화합니다.bar()메서드를 사용해 막대 그래프를 그립니다.막대 객체들을 순회하며 각 막대(patch)의 높이를 구한 뒤,
annotate()메서드로 해당 위치에 백분율 값을 표시합니다.show()메서드를 호출하여 그림을 화면에 출력합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
frequencies = [7, 8, 5, 3, 6]
plt.figure()
p1 = plt.bar(np.arange(len(frequencies)), frequencies)
for rect1 in p1:
height = rect1.get_height()
plt.annotate("{}%".format(height),
(rect1.get_x() + rect1.get_width()/2, height+.05),
ha="center", va="bottom", fontsize=15)
plt.show()
실행 결과
위 코드를 실행하면 다음과 같이 각 막대 위에 백분율 레이블이 표시된 그래프가 출력됩니다.

코드 설명
핵심은 for rect1 in p1: 반복문입니다. p1에는 bar()가 반환한 BarContainer 객체가 담겨 있으며, 이를 순회하면 개별 막대(Rectangle 패치)에 접근할 수 있습니다. get_height()로 막대의 높이, 즉 데이터 값을 가져오고, get_x()와 get_width()를 이용해 막대의 가로 중앙 좌표를 계산합니다. 마지막으로 annotate()에 ha="center"와 va="bottom" 옵션을 지정하면 막대 꼭대기 바로 위에 백분율 레이블이 중앙 정렬되어 깔끔하게 표시됩니다.