데이터 시각화에서 두 개 이상의 데이터 계열을 비교해야 할 때, 하나의 차트에 여러 개의 가로 막대를 나란히 배치하는 방식이 매우 유용합니다. Matplotlib에서는 barh() 함수를 활용하면 손쉽게 구현할 수 있습니다. 아래 단계와 예제 코드를 따라 해보세요.
구현 단계
라이브러리 임포트: pandas, matplotlib, numpy 라이브러리를 불러옵니다.
그림 크기 설정: figure 크기를 지정하고 서브플롯 주변 및 사이의 패딩을 조절합니다.
막대 위치 배열 생성: 각 가로 막대가 위치할 y축 좌표 배열을 만듭니다.
막대 너비 변수 초기화: 막대의 너비를 결정하는
width변수를 설정합니다.가로 막대 그래프 생성:
barh()메서드를 사용하여 데이터 계열별로 가로 막대를 그립니다. 두 번째 막대는 첫 번째 막대 위치에 width를 더한 값에 배치하여 나란히 표시합니다.Y축 눈금 및 레이블 설정: y축 눈금과 눈금 레이블을 지정하고 적절한 범위(limit)를 설정합니다.
범례 추가: 차트 오른쪽 상단(upper right)에 범례를 배치합니다.
그래프 표시:
show()메서드를 호출하여 최종 그림을 화면에 출력합니다.
예제 코드
import pandas import matplotlib.pyplot as plt import numpy as np # 그림 크기 설정 plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True # 가로 막대의 위치 배열 ind = np.array([0, 1, 2]) # 막대 너비 width = 0.4 fig, ax = plt.subplots() # 가로 막대 그래프 ax.barh(ind, np.array([4, 3, 5]), width, color='orange', label='N') ax.barh(ind + width, np.array([2, 5, 2]), width, color='blue', label='M') # Y축 눈금 및 눈금 레이블 설정 ax.set(yticks=ind + width, yticklabels=np.array(['A', 'B', 'C']), ylim=[2*width - 1, len(ind)]) # 오른쪽 상단에 범례 배치 ax.legend(loc='upper right') # 그래프 출력 plt.show()
실행 결과
위 코드를 실행하면 주황색('N')과 파란색('M') 두 데이터 계열이 카테고리 A, B, C별로 나란히 배치된 가로 막대 그래프가 생성됩니다. 각 카테고리마다 두 개의 막대가 짝을 이루어 값을 직관적으로 비교할 수 있으며, 오른쪽 상단의 범례를 통해 어떤 색상이 어떤 계열인지 쉽게 확인할 수 있습니다.

핵심 포인트 정리
여러 개의 가로 막대를 하나의 차트에 그리는 핵심은 막대 위치 오프셋입니다. 두 번째 barh() 호출 시 ind + width처럼 기준 위치에 너비만큼 더해주면, 막대들이 겹치지 않고 깔끔하게 나란히 배치됩니다. 데이터 계열이 세 개 이상일 경우에도 같은 방식으로 오프셋을 누적하여(ind + 2*width 등) 확장할 수 있습니다.