Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib로 가로 누적 막대 차트 그리기 (barh 완벽 가이드)

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건이므로 노란색 막대만 길게 나타나며, 오른쪽 상단의 범례를 통해 각 색상의 의미를 쉽게 확인할 수 있습니다.

Matplotlib로 가로 누적 막대 차트 그리기 (barh 완벽 가이드)