막대 그래프(bar plot)에서 각 막대 위에 해당 값을 텍스트로 표시하면 데이터를 한눈에 파악하기가 훨씬 쉬워집니다. Python의 Matplotlib 라이브러리를 사용하면 몇 단계만으로 이를 구현할 수 있습니다.
구현 단계
- 그림 크기(figure size)를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
- 연도(year), 인구(population), x 좌표 리스트를 생성하고 막대 너비(width) 변수를 초기화합니다.
subplots()메서드를 사용해 figure와 subplot 세트를 생성합니다.- y축 레이블(ylabel), 제목(title), x축 눈금(xticks), x축 눈금 레이블(xticklabels)을 설정합니다.
bar()메서드에 x, population, width 데이터를 전달하여 막대를 그립니다.- 막대 패치(bar patches)를 순회하면서
text()메서드로 각 막대 상단에 값을 표시합니다. show()메서드를 호출하여 그래프를 화면에 출력합니다.
예제 코드
from matplotlib import pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
years = [1901, 1911, 1921, 1931, 1941, 1951, 1961, 1971, 1981, 1991, 2001, 2011]
population = [237.4, 238.4, 252.09, 251.31, 278.98, 318.66, 361.09,
439.23, 548.16, 683.33, 846.42, 1028.74]
x = np.arange(len(years)) # 레이블 위치
width = 0.35 # 막대 너비
fig, ax = plt.subplots()
ax.set_ylabel('Population(in million)')
ax.set_title('Years')
ax.set_xticks(x)
ax.set_xticklabels(years)
pps = ax.bar(x - width / 2, population, width, label='population')
for p in pps:
height = p.get_height()
ax.text(x=p.get_x() + p.get_width() / 2, y=height+.10,
s="{}".format(height),
ha='center')
plt.show()핵심 포인트 설명
위 코드에서 가장 중요한 부분은 마지막의 for 반복문입니다. ax.bar()가 반환하는 BarContainer에는 개별 막대 객체(Rectangle 패치)들이 담겨 있습니다. 각 막대에 대해 다음과 같이 처리합니다.
p.get_height(): 막대의 높이, 즉 데이터 값을 가져옵니다.p.get_x() + p.get_width() / 2: 막대의 수평 중앙 지점 x좌표를 계산합니다.y=height+.10: 막대 꼭대기보다 약간 위에 텍스트가 위치하도록 오프셋을 더합니다.ha='center': 텍스트를 x좌표 기준으로 가운데 정렬하여 막대 중앙에 오도록 합니다.
실행 결과
코드를 실행하면 연도별 인구 변화를 나타내는 막대 그래프가 출력되며, 각 막대 바로 위에 해당 인구 수치(백만 명 단위)가 텍스트로 함께 표시됩니다. 이 방식은 프레젠테이션이나 보고서용 차트에서 정확한 수치를 강조할 때 특히 유용합니다.