Matplotlib에서 가로 누적 막대 차트(horizontal stacked bar chart)를 그리려면 barh() 메서드와 left 매개변수를 함께 활용하면 됩니다. 핵심 아이디어는 두 번째 막대의 시작 위치(left)를 첫 번째 막대의 값만큼 이동시켜, 마치 쌓여 있는 것처럼 보이게 만드는 것입니다.
구현 단계
- 그림(figure) 크기를 설정하고,
figure.autolayout옵션으로 서브플롯 주변 여백을 자동 조정합니다. - 연도(year), 처리 완료된 이슈 수(issues_addressed), 대기 중인 이슈 수(issues_pending) 리스트를 생성합니다.
plt.barh()에 연도와 처리된 이슈 데이터를 전달하여 첫 번째 가로 막대를 그립니다.- 두 번째
barh()호출 시left=issues_addressed를 지정하면, 대기 이슈 막대가 처리된 이슈 막대 뒤에 이어져 누적 형태가 됩니다. plt.legend()로 각 막대가 무엇을 의미하는지 범례를 표시합니다.plt.show()메서드를 호출해 최종 그래프를 화면에 출력합니다.
예제 코드
from matplotlib import pyplot as plt # 그림 크기 및 레이아웃 자동 조정 설정 plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True # 데이터 준비 year = [2014, 2015, 2016, 2017, 2018, 2019] issues_addressed = [10, 14, 0, 10, 15, 15] issues_pending = [5, 10, 50, 2, 0, 10] # 첫 번째 막대: 처리 완료된 이슈 b1 = plt.barh(year, issues_addressed, color="red") # 두 번째 막대: left 옵션으로 처리된 이슈 뒤에 누적 b2 = plt.barh(year, issues_pending, left=issues_addressed, color="yellow") # 범례 추가 plt.legend([b1, b2], ["Completed", "Pending"], title="Issues", loc="upper right") plt.show()
코드 핵심 포인트
누적 막대 차트의 성패는 left 매개변수에 달려 있습니다. left=issues_addressed를 지정하면 노란색 막대(대기 이슈)가 빨간색 막대(처리된 이슈)가 끝나는 지점부터 시작하기 때문에, 두 막대가 한 줄로 연결된 누적 형태가 자연스럽게 완성됩니다.
실행 결과
위 코드를 실행하면 연도별로 처리 완료 이슈(빨간색)와 대기 이슈(노란색)가 하나의 막대에 누적되어 표시됩니다. 예를 들어 2016년은 처리된 이슈가 0건이므로 노란색 막대만 길게 나타나며, 오른쪽 상단의 범례를 통해 각 색상의 의미를 쉽게 확인할 수 있습니다.
