Matplotlib에서 깨진 가로 막대 그래프(broken horizontal bar graph)를 그리려면 broken_barh() 메서드를 사용하면 됩니다. 이 메서드는 여러 개의 가로 직사각형을 연속적으로 배치하여, 중간에 비어 있는 구간이 있는 막대그래프를 표현할 수 있게 해줍니다. 작업 일정(Gantt 차트), 장비 가동 시간, 경주 기록 등 구간별 데이터를 시각화할 때 특히 유용합니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변과 사이의 여백을 조정합니다.
- 하나의 그림과 서브플롯 집합을 생성합니다.
broken_barh()를 사용해 가로 방향으로 이어지는 직사각형 시퀀스를 그립니다.- X축과 Y축의 표시 범위(limit)를 설정합니다.
- 격자선(grid lines)을 구성합니다.
- 깨진 막대에 주석(annotation)을 추가합니다.
- 그림을 화면에 표시하려면
show()메서드를 사용합니다.
예제 코드
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 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'))
# X축, Y축 범위 설정
ax.set_ylim(5, 35)
ax.set_xlim(0, 200)
# 격자선 설정
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(xr, yr)에서 첫 번째 인수인 xr은 각 직사각형의 시작 위치와 너비를 담은 튜플의 시퀀스이고, 두 번째 인수인 yr은 막대의 y축 시작 위치와 높이를 의미합니다. 예를 들어 (110, 30)은 x=110에서 시작하여 너비가 30인 직사각형을 그립니다. facecolors 인수를 리스트로 전달하면 각 구간마다 다른 색상을 지정할 수 있습니다.
또한 annotate() 메서드를 활용하면 특정 지점을 화살표로 가리키며 설명 텍스트를 추가할 수 있습니다. 위 예제에서는 'race interrupted'(경주 중단)라는 문구로 비어 있는 구간을 강조했습니다.
실행 결과
위 코드를 실행하면 두 개의 깨진 가로 막대가 그려진 그래프가 출력됩니다. 파란색 막대는 한 줄에 두 개의 구간으로 나뉘어 있고, 주황색·녹색·빨간색 막대는 세 개의 구간으로 구성되어 있습니다. 각 구간 사이의 빈 공간이 '중단된 구간'을 나타내며, 화살표가 달린 주석이 해당 지점을 명확히 표시합니다.