Python의 Matplotlib에서는 일반적인 주 눈금(major tick)과 보조 눈금(minor tick)뿐만 아니라, 세 번째 수준의 눈금(third-level ticks)까지 추가할 수 있습니다. 핵심 아이디어는 twiny()로 Y축을 공유하는 쌍둥이 축을 만들고, FixedLocator를 이용해 각 축에 서로 다른 눈금 값을 지정하는 것입니다. 아래에서 단계별로 자세히 알아보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
- numpy를 사용해 t와 s 데이터 포인트를 생성합니다.
- figure와 서브플롯 집합을 생성합니다.
plot()메서드로 t와 s를 그립니다.- Y축을 공유하는 쌍둥이 축(twin Axes)을 생성합니다.
- 생성된 축(ax1) 위에
plot()메서드로 t와 s를 다시 그립니다. - X축 눈금 위치를 하단(bottom)으로 설정합니다.
- majors, minors, 그리고 세 번째 수준 눈금 값인 thirds를 생성합니다.
FixedLocator를 사용해 major, minor, third 눈금 로케이터(locator)를 각각 설정합니다.tick_params()로 눈금의 길이를 조절합니다.- 회색 수평선을 그려 기준선을 표시합니다.
show()메서드로 최종 그림을 화면에 출력합니다.
예제 코드
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
t = np.arange(0.0, 100.0, 0.1)
s = np.sin(0.1 * np.pi * t) * np.exp(-t * 0.01)
fig, ax = plt.subplots()
plt.plot(t, s)
ax1 = ax.twiny()
ax1.plot(t, s)
ax1.xaxis.set_ticks_position('bottom')
majors = np.linspace(0, 100, 6)
minors = np.linspace(0, 100, 11)
thirds = np.linspace(0, 100, 101)
ax.xaxis.set_major_locator(matplotlib.ticker.FixedLocator(majors))
ax.xaxis.set_minor_locator(matplotlib.ticker.FixedLocator(minors))
ax1.xaxis.set_major_locator(matplotlib.ticker.FixedLocator([]))
ax1.xaxis.set_minor_locator(matplotlib.ticker.FixedLocator(thirds))
ax1.tick_params(which='minor', length=2)
ax.tick_params(which='minor', length=4)
ax.tick_params(which='major', length=6)
ax.grid(which='both', axis='x', linestyle='--')
plt.axhline(color='gray')
plt.show()코드 설명
위 코드에서 majors는 0부터 100까지 6개의 주 눈금을, minors는 11개의 보조 눈금을, thirds는 무려 101개의 세 번째 수준 눈금을 생성합니다. 원본 축(ax)에는 major와 minor 눈금을 배치하고, 쌍둥이 축(ax1)에는 major 눈금을 비운 채 thirds 값만 minor 위치에 할당합니다. 이렇게 하면 두 축의 눈금이 겹치지 않으면서 세 가지 밀도의 눈금을 한 그래프에 동시에 표현할 수 있습니다.
눈금 길이는 tick_params()로 구분되는데, third 눈금은 2, minor 눈금은 4, major 눈금은 6으로 설정해 시각적으로 계층을 명확하게 만듭니다. 마지막으로 ax.grid()에 X축 방향 점선 그리드를 추가하고, 회색 수평선으로 y=0 기준선을 표시했습니다.
실행 결과

실행 결과를 보면 X축 하단에 세 가지 길이의 눈금이 계층적으로 나타나는 것을 확인할 수 있습니다. 이 기법은 정밀한 데이터 분석이나 과학적 시각화에서 세밀한 눈금 참조가 필요할 때 특히 유용합니다.