Matplotlib에서 여러 레이블을 표시하는 막대 차트를 그리려면 다음 단계를 따르면 됩니다.
구현 단계
남성 평균(men_means), 남성 표준편차(men_std), 여성 평균(women_means), 여성 표준편차(women_std)에 사용할 데이터셋을 준비합니다.
NumPy를 이용해 인덱스(x축 위치) 데이터 포인트를 생성합니다.
막대의 너비(width)를 초기화합니다.
subplots() 메서드를 사용해 figure와 서브플롯(axes)을 생성합니다.
bar() 메서드로 두 개의 막대 사각형 rects1과 rects2를 만듭니다.
set_ylabel(), set_title(), set_xticks(), set_xticklabels() 메서드를 사용해 축 레이블, 제목, x축 눈금을 설정합니다.
legend() 메서드로 차트에 범례를 추가합니다.
autolabel() 함수를 정의해 각 막대 위에 값 레이블을 자동으로 표시합니다.
show() 메서드를 호출해 최종 그래프를 화면에 출력합니다.
예제 코드
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# 남성/여성 평균 점수와 표준편차 데이터
men_means, men_std = (20, 35, 30, 35, 27), (2, 3, 4, 1, 2)
women_means, women_std = (25, 32, 34, 20, 25), (3, 5, 2, 3, 3)
ind = np.arange(len(men_means)) # 그룹별 x축 위치
width = 0.35 # 막대의 너비
fig, ax = plt.subplots()
rects1 = ax.bar(ind - width/2, men_means, width, yerr=men_std, label='Men')
rects2 = ax.bar(ind + width/2, women_means, width, yerr=women_std, label='Women')
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(ind)
ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5'))
ax.legend()
def autolabel(rects, xpos='center'):
"""각 막대 위에 높이(값)를 레이블로 표시하는 함수"""
ha = {'center': 'center', 'right': 'left', 'left': 'right'}
offset = {'center': 0, 'right': 1, 'left': -1}
for rect in rects:
height = rect.get_height()
ax.annotate('{}'.format(height),
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(offset[xpos]*3, 3), # 3포인트 오프셋 적용
textcoords="offset points", # 양방향 모두 적용
ha=ha[xpos], va='bottom')
autolabel(rects1, "left")
autolabel(rects2, "right")
plt.show()코드 설명
위 코드의 핵심 포인트는 다음과 같습니다.
그룹화된 막대 배치:
ind - width/2와ind + width/2를 사용해 남성 막대와 여성 막대를 나란히 배치하여 비교하기 쉽게 만듭니다.오차 막대(yerr):
yerr파라미터에 표준편차 값을 전달하면 각 막대 위에 오차 범위가 함께 표시됩니다.autolabel() 함수:
ax.annotate()를 활용해 각 막대의 높이 값을 막대 상단에 표시합니다.xpos인자로 'left', 'center', 'right' 위치를 지정할 수 있어, 인접한 두 막대의 레이블이 겹치지 않도록 조정할 수 있습니다.
실행 결과
코드를 실행하면 G1부터 G5까지 다섯 개 그룹별로 남성(Men)과 여성(Women)의 점수가 나란히 표시된 막대 차트가 출력되며, 각 막대 위에는 해당 값이 레이블로 표시되고 오차 범위도 함께 나타납니다.