Matplotlib에서 두 개의 Y축을 가진 차트에 막대 그래프와 선 그래프를 함께 표시하려면 twinx() 메서드를 사용하면 됩니다. 이 메서드는 X축을 공유하면서 Y축은 서로 독립적인 쌍둥이 Axes 객체를 생성해 줍니다.
구현 단계
그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
두 개의 열(col1, col2)을 가진 Pandas 데이터프레임을 생성합니다.
plot() 메서드에 kind="bar" 옵션을 지정하여 데이터프레임을 막대 그래프로 그립니다.
twinx() 메서드를 사용하여 X축을 공유하지만 Y축은 독립적인 쌍둥이 Axes를 만듭니다.
막대 그래프의 X축 눈금(ticks) 위치와 데이터프레임 열 값을 사용하여 선 그래프를 그립니다.
show() 메서드를 호출하여 최종 그림을 화면에 표시합니다.
예제 코드
from matplotlib import pyplot as plt
import pandas as pd
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame({"col1": [1, 3, 5, 7, 1], "col2": [1, 5, 7, 9, 1]})
ax = df.plot(kind="bar")
ax2 = ax.twinx()
ax2.plot(ax.get_xticks(),
df[['col1', 'col2']].values,
linestyle='-',
marker='o', linewidth=2.0)
plt.show()실행 결과
위 코드를 실행하면 막대 그래프 위에 같은 X축 위치에 정렬된 선 그래프가 마커(o)와 함께 표시됩니다. 왼쪽 Y축은 막대 그래프의 값 범위를, 오른쪽 Y축은 선 그래프의 값 범위를 나타내므로, 서로 다른 스케일의 두 데이터를 하나의 차트에서 직관적으로 비교할 수 있습니다.
핵심 포인트
twinx()는 기존 Axes의 X축을 공유하는 새로운 Y축(Axes)을 생성합니다.
선 그래프를 막대 중심에 정확히 맞추려면 ax.get_xticks()로 반환되는 눈금 좌표를 그대로 사용하는 것이 중요합니다.
두 축의 눈금 간격이나 색상을 조정하면 가독성을 더욱 높일 수 있습니다.