데이터 분석을 하다 보면 길이가 서로 다른 두 개의 배열을 하나의 그래프에 함께 표현해야 하는 경우가 자주 있습니다. 예를 들어, 원본 데이터와 이동 평균처럼 축소된 데이터를 비교할 때가 대표적입니다. matplotlib에서는 각 배열의 길이가 달라도 x축 좌표를 별도로 지정해 주기만 하면 아무 문제 없이 한 화면에 플로팅할 수 있습니다.
구현 단계
- 그림(figure) 크기를 설정하고, 서브플롯 주변과 사이의 여백(padding)을 조정합니다.
- numpy를 사용하여 서로 다른 길이의 y1, x1, y2, x2 데이터 포인트를 생성합니다.
- plot() 메서드를 사용해 (x1, y1)과 (x2, y2) 데이터를 각각 플로팅합니다.
- show() 메서드를 호출하여 그래프를 화면에 표시합니다.
예제 코드
import numpy as np import matplotlib.pyplot as plt # 그림 크기 및 레이아웃 설정 plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True # 길이가 100인 원본 데이터 생성 (누적 합) y1 = (np.random.random(100) - 0.5).cumsum() # 같은 데이터를 10개 구간의 평균으로 축소 → 길이 10짜리 배열 y2 = y1.reshape(-1, 10).mean(axis=1) # 각 배열 길이에 맞는 x축 값 생성 x1 = np.linspace(0, 1, 100) x2 = np.linspace(0, 1, 10) # 두 배열 플로팅 plt.plot(x1, y1) plt.plot(x2, y2) plt.show()
실행 결과
위 코드를 실행하면 길이가 100인 원본 곡선과, 길이가 10으로 줄어든 평균값 곡선이 동일한 x축 범위(0~1) 위에 함께 그려진 그래프를 확인할 수 있습니다.


핵심 포인트
여기서 중요한 것은 y값의 길이가 아니라 x값과 y값의 길이가 서로 일치해야 한다는 점입니다. x1은 100개, x2는 10개로 각각 대응되는 y배열과 길이를 맞춰주었기 때문에, 두 배열의 절대 길이가 달라도 matplotlib는 오류 없이 정상적으로 그래프를 그립니다. 이 방식은 리샘플링된 데이터, 이동 평균, 다운샘플링 결과 등을 원본 데이터와 비교할 때 매우 유용하게 활용됩니다.