Python의 Pandas와 Matplotlib를 활용하면 각 이벤트의 시작일과 종료일을 가로 막대 형태로 표현하여 누적 이벤트 기간(cumulative event duration)을 손쉽게 시각화할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고, 서브플롯 주변과 사이의 여백(padding)을 조정합니다.
- 각 이벤트의 시작 시점(xmin)과 종료 시점(xmax)을 담은 데이터프레임을 생성합니다.
- hlines() 메서드를 사용하여 각 이벤트를 수평선으로 그려 누적 이벤트 기간을 플롯합니다.
- show() 메서드를 호출하여 최종 그래프를 화면에 출력합니다.
예제 코드
import pandas as pd
from datetime import datetime as dt
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame(dict(
xmin=[dt.strptime('1994-07-19', '%Y-%m-%d'),
dt.strptime('2006-03-16', '%Y-%m-%d'),
dt.strptime('1980-10-31', '%Y-%m-%d'),
dt.strptime('1981-06-11', '%Y-%m-%d'),
dt.strptime('2006-06-28', '%Y-%m-%d')],
xmax=[dt.strptime('1998-06-30', '%Y-%m-%d'),
dt.strptime('2007-01-24', '%Y-%m-%d'),
dt.strptime('2007-07-31', '%Y-%m-%d'),
dt.strptime('1990-08-01', '%Y-%m-%d'),
dt.strptime('2007-01-24', '%Y-%m-%d')]
))
plt.hlines(df.index, df.xmin, df.xmax, lw=5, colors='red')
plt.show()코드 설명
datetime.strptime()을 사용해 문자열 형태의 날짜를 datetime 객체로 변환한 뒤, 이를 xmin(시작일)과 xmax(종료일) 컬럼으로 구성된 데이터프레임에 저장합니다. 이후 plt.hlines()에 데이터프레임의 인덱스(y축 위치), 시작일, 종료일을 순서대로 전달하면 각 행(row)마다 하나의 수평선이 그려집니다. lw=5 옵션으로 선 두께를 지정하고, colors='red'로 선 색상을 빨간색으로 설정했습니다.
실행 결과
위 코드를 실행하면 y축에는 각 이벤트의 인덱스 번호가, x축에는 날짜가 표시되며, 각 이벤트의 지속 기간이 빨간색 수평 막대로 나타납니다. 이러한 시각화 방식은 프로젝트 일정, 장비 가동 기간, 데이터 수집 구간 등 특정 기간 동안 발생한 이벤트를 한눈에 비교할 때 매우 유용합니다.