데이터 시각화를 하다 보면 막대 그래프와 선 그래프를 하나의 플롯에 겹쳐서 표현해야 하는 경우가 자주 있습니다. Matplotlib과 pandas를 활용하면 이를 간단하게 구현할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.
구현 단계
그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
pandas의 DataFrame을 사용하여 2차원 테이블 형태의 데이터를 생성합니다.
plt.subplots()를 호출하여 figure와 subplot 집합을 만듭니다.
2단계에서 만든 데이터프레임으로 막대 그래프(bar)와 선 그래프(line)를 순서대로 그립니다.
plt.show() 메서드를 사용하여 완성된 그림을 화면에 표시합니다.
예제 코드
import pandas as pd import matplotlib.pyplot as plt # 그림 크기 및 레이아웃 자동 조정 설정 plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True # 샘플 데이터 생성 df = pd.DataFrame(dict(data=[2, 4, 1, 5, 9, 6, 0, 7])) fig, ax = plt.subplots() # 막대 그래프 그리기 (빨간색) df['data'].plot(kind='bar', color='red') # 같은 축 위에 선 그래프 그리기 (검은색, 별 모양 마커) df['data'].plot(kind='line', marker='*', color='black', ms=10) plt.show()
실행 결과
위 코드를 실행하면 빨간색 막대 그래프 위에 검은색 별(*) 마커가 찍힌 선 그래프가 겹쳐진 하나의 플롯이 출력됩니다. 두 그래프가 동일한 x축과 y축을 공유하기 때문에 데이터의 추세선과 개별 값의 크기를 동시에 비교할 수 있어 분석에 매우 유용합니다.
핵심 포인트
여기서 중요한 점은 pandas의 plot() 메서드를 연속으로 호출하면 기본적으로 같은 Axes 객체에 그래프가 누적되어 그려진다는 것입니다. 만약 별도의 축에 그리고 싶다면 ax 파라미터에 다른 Axes 객체를 지정하면 됩니다. 또한 marker와 ms(marker size) 옵션을 활용하면 선 그래프의 데이터 포인트를 더욱 돋보이게 표현할 수 있습니다.