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

Matplotlib로 깨진 가로 막대 플롯(broken_barh) 만드는 방법

깨진 가로 막대 플롯(broken horizontal bar plot)은 여러 개의 사각형을 가로 방향으로 이어 붙여 데이터의 구간별 흐름을 한눈에 보여주는 그래프입니다. 작업 중단 구간이나 비연속적인 시간 데이터를 시각화할 때 특히 유용하며, Matplotlib의 broken_barh() 메서드를 사용하면 간단하게 구현할 수 있습니다.

깨진 가로 막대 플롯 만들기 단계

  • 그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
  • figure와 서브플롯(subplots) 집합을 생성합니다.
  • broken_barh() 메서드로 가로 방향으로 배치된 사각형 시퀀스를 그립니다.
  • x축·y축의 눈금 범위, X축 레이블, yticks 및 yticklabels를 설정합니다.
  • 격자선(grid)을 활성화하여 가독성을 높입니다.
  • annotate() 메서드를 사용해 특정 위치를 화살표로 가리키는 설명 텍스트를 추가합니다.
  • show() 메서드를 호출하여 최종 그래프를 화면에 표시합니다.

예제 코드

import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig, ax = plt.subplots()

ax.broken_barh([(110, 30), (150, 10)], (10, 9), facecolors='tab:blue')
ax.broken_barh([(10, 50), (100, 20), (130, 10)], (20, 9),
               facecolors=('tab:orange', 'tab:green', 'tab:red'))
ax.set_ylim(5, 35)
ax.set_xlim(0, 200)
ax.set_xlabel('seconds since start')
ax.set_yticks([15, 25])
ax.set_yticklabels(['Bill', 'Jim'])
ax.grid(True)

ax.annotate('race interrupted', (61, 25),
            xytext=(0.8, 0.9), textcoords='axes fraction',
            arrowprops=dict(facecolor='black', shrink=0.05),
            fontsize=16,
            horizontalalignment='right', verticalalignment='top')

plt.show()

코드 설명

broken_barh()의 첫 번째 인수는 (시작 위치, 폭) 형태의 튜플 리스트로, 각 사각형이 x축 어디에서 시작하고 얼마나 이어질지를 결정합니다. 두 번째 인수인 (10, 9)와 (20, 9)는 각 막대가 놓일 y축 위치와 높이를 의미합니다. facecolors 옵션으로 막대마다 다른 색상을 지정할 수 있으며, set_yticks()와 set_yticklabels()를 사용해 y축 숫자 대신 'Bill', 'Jim'처럼 의미 있는 이름을 표시했습니다.

또한 annotate() 메서드를 활용하면 'race interrupted'처럼 특정 지점을 화살표로 짚어주는 주석을 추가할 수 있어, 경기 중단 구간 같은 이벤트를 직관적으로 전달할 수 있습니다.

실행 결과

위 코드를 실행하면 두 명의 참가자(Bill, Jim)별로 진행 구간이 가로 막대로 표시되고, 중단된 구간은 막대가 끊긴 형태로 나타나며, 화살표 주석이 해당 지점을 가리키는 그래프가 출력됩니다.