본문 바로가기
데이터 분석/시각화

[Matplotlib] x축, y축 끝에 화살표 추가하기 (feat. Polygon)

by 부자 꽁냥이 2022. 7. 17.

안녕하세요~ 꽁냥이에요. 우리가 중고등학교 때 배운 좌표체계를 보면 아래와 같이 x축과 y축 끝에 화살표가 있었다는 것을 기억하실 겁니다.

 

안타깝게도 Matplotlib에서는 화살표를 자동으로 추가해주는 방법이 없습니다. 따라서 수동으로 만들어줘야 하는데요. 이번 포스팅에서는 x, y축 끝에 화살표를 추가하는 방법을 알아보겠습니다.


   x축, y축 끝에 화살표 추가하기

화살표를 추가하는 방법은 여러가지가 있습니다. 꽁냥이는 그중에서 Polygon이라는 Patch를 사용할 거예요. 핵심은 Polygon을 이용하여 삼각형을 두 개를 만들고 이를 x, y축 끝에다가 예쁘게 옮겨놓으면 된다는 것입니다. 이때 추가적으로 삼각형은 정삼각형으로 만들기 위해 삼각형의 반쪽 변과 높이의 비율인 1:$\sqrt{3}$을 적용했습니다. 물론 figure의 가로, 세로 비율이 1:1이 아닌 경우 정삼각형처럼 안 보일 수 있습니다. 아래 코드를 살펴보세요. 핵심은 설명했고 나머지는 주석을 참고해주세요.

 

import numpy as np
import matplotlib.pyplot as plt

from matplotlib.patches import Polygon

fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()

ax.plot(range(10), range(10))

x_max, y_max = 1, 1 ## 화살표 꼭지점의 좌표

## x축 화살표
x_arrow_width = 0.01 ## 화살 폭

x_arrow = Polygon( [[x_max-np.sqrt(3)*x_arrow_width, -x_arrow_width], 
                    [x_max-np.sqrt(3)*x_arrow_width, x_arrow_width], 
                    [x_max, 0]], ## 삼각형 경로
                  closed=True, ## 닫힌 경로로 설정
                  fill=True, ## 색상 채움
                  color='k', ## 색상
                  transform=ax.transAxes, ## 표시될 좌표체계 설정 left-bottom (0,0) ~ right-top (1,1)
                  clip_on=False ## 맨앞으로 보내기
    )
ax.add_patch(x_arrow) # 삼각형 추가

## y축 화살표
y_arrow_width = x_arrow_width
y_arrow = Polygon( [[-y_arrow_width, y_max-np.sqrt(3)*y_arrow_width], 
                    [y_arrow_width, y_max-np.sqrt(3)*y_arrow_width], 
                    [0, y_max]], ## 삼각형 경로
                  closed=True, ## 닫힌 경로로 설정
                  fill=True, ## 색상 채움
                  color='k', ## 색상
                  transform=ax.transAxes, ## 표시될 좌표체계 설정 left-bottom (0,0) ~ right-top (1,1)
                  clip_on=False ## 맨앞으로 보내기
    )
ax.add_patch(y_arrow) # 삼각형 추가

## 필요없는 축 제거
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.show()

 

보시는 바와 같이 화살표(정확히는 삼각형)가 예쁘게 추가되었습니다.


이번 포스팅에서는 x축, y축 끝에 화살표를 추가하는 방법을 알아보았습니다. 이게 은근히 자주 쓰이므로 알아두시면 유용하게 써먹을 수 있습니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.

 


댓글


맨 위로