Matplotlib에서 플롯의 xtick 레이블을 일반적인 텍스트 대신 간단한 도형(원, 사각형 등)으로 표현하고 싶다면, add_patch() 메서드를 활용하면 됩니다. 아래 단계별로 살펴보겠습니다.
구현 단계
- 그림 크기를 설정하고 서브플롯 주변과 사이의 여백을 조정합니다.
- 도형이 그려질 y축 위치를 초기화합니다.
- figure() 메서드로 새 그림을 생성하거나 기존 그림을 활성화합니다.
- add_subplot() 메서드를 사용해 그림에 '~.axes.Axes'를 추가합니다.
- plot() 메서드로 선 그래프를 그립니다.
- set_ticks() 메서드로 X축 눈금 위치를 지정합니다.
- 눈금 레이블을 빈 값으로 설정하여 기존 텍스트를 제거합니다.
- Circle()과 Rectangle() 클래스를 인스턴스화한 후, add_patch() 메서드로 원과 사각형 패치를 추가합니다.
- show() 메서드로 그림을 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt
import matplotlib.patches as patches
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
y = -.75
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
ax.get_xaxis().set_ticks([2, 4, 6, 8])
ax.get_xaxis().set_ticklabels([])
ax.add_patch(patches.Circle((2, y), radius=.2,
clip_on=False, facecolor='red'))
ax.add_patch(patches.Circle((4, y), radius=.2,
clip_on=False, facecolor='yellow'))
ax.add_patch(patches.Rectangle((6 - .1, y - .05), .2, .2,
clip_on=False, facecolor='blue'))
ax.add_patch(patches.Rectangle((8 - .1, y - .05), .2, .2,
clip_on=False, facecolor='green'))
plt.show()코드 설명
위 코드에서 핵심은 다음과 같습니다. 먼저 set_ticks([2, 4, 6, 8])으로 눈금 위치를 지정하고, set_ticklabels([])로 기본 숫자 레이블을 비웁니다. 이후 각 눈금 위치(x=2, 4)에는 Circle 패치로 빨간색·노란색 원을, x=6, 8 위치에는 Rectangle 패치로 파란색·녹색 사각형을 배치합니다.
여기서 clip_on=False 옵션은 중요합니다. 도형의 y좌표(-0.75)가 축 범위 밖에 있기 때문에, 이 옵션이 없으면 축 영역을 벗어난 부분이 잘려 보이지 않게 됩니다. 이 옵션을 통해 축 바깥에 있는 도형도 정상적으로 렌더링됩니다.
실행 결과
코드를 실행하면 선 그래프 아래쪽에 위치한 4개의 눈금 자리에 숫자 대신 빨강·노랑 원과 파랑·녹색 사각형이 표시된 것을 확인할 수 있습니다.
이 기법은 데이터 시각화에서 범주형 데이터를 색상이나 아이콘으로 직관적으로 구분해야 할 때 유용하게 활용할 수 있습니다.