Matplotlib에서 xticks의 실제 값에 상관없이 눈금을 균일한 간격으로 배치하려면 set_ticks()과 set_ticklabels() 메서드를 활용하면 됩니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
- numpy를 사용하여 x, y 데이터 포인트를 생성합니다.
- subplots() 메서드로 그림과 서브플롯 세트를 생성합니다.
- 첫 번째 축(ax1)에 x, y 데이터를 플롯합니다.
- xaxis.set_ticks() 메서드로 xticks를 설정합니다.
- 두 번째 축(ax2)에 x, y 데이터를 플롯합니다.
- xaxis.set_ticks()와 xaxis.set_ticklabels() 메서드를 사용해 눈금 위치와 라벨을 분리하여 설정합니다.
- show() 메서드로 결과를 화면에 표시합니다.
예제 코드
import numpy as np from matplotlib import pyplot as plt plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True x = np.array([1, 1.5, 3, 5, 6]) y = np.power(2, x) fig, (ax1, ax2) = plt.subplots(2, 1) ax1.plot(x, y) ax1.xaxis.set_ticks(x) ax2.plot(x, y) ax2.xaxis.set_ticks(range(len(x))) ax2.xaxis.set_ticklabels(x) plt.show()
동작 원리
핵심은 눈금의 위치(position)와 라벨(label)을 분리하는 것입니다.
- ax1:
set_ticks(x)를 호출하면 눈금이 실제 x값(1, 1.5, 3, 5, 6)의 좌표 위치에 배치됩니다. 따라서 값의 간격이 불규칙하면 눈금 간격도 불규칙해집니다. - ax2:
set_ticks(range(len(x)))로 눈금 위치를 0, 1, 2, 3, 4처럼 연속적인 정수로 지정한 뒤,set_ticklabels(x)로 라벨만 실제 x값으로 교체합니다. 이렇게 하면 눈금은 완전히 균일한 간격으로 배치되면서도 라벨에는 원래 데이터 값을 그대로 표시할 수 있습니다.
이 기법은 시계열 데이터처럼 샘플 간 간격이 일정하지 않은 데이터를 인덱스 기반으로 깔끔하게 시각화할 때 특히 유용합니다.
실행 결과
위 코드를 실행하면 아래와 같이 두 개의 그래프가 출력됩니다. 위쪽 그래프는 실제 값 위치에 눈금이 배치되고, 아래쪽 그래프는 균일한 간격의 눈금에 실제 값이 라벨로 표시됩니다.
