[파이썬] 선위에 글씨와 점 그리기(마커 설정)
- Python/그래프 그리기
- 2023. 10. 30.
원하는 좌표에 점으로 표현할 수 있다면?
그래프를 그리는 건 어찌어찌 하는데 내가 원하는 곳에 점을 표시하고 글씨를 쓸 수 있으면 더 멋진 그래프를 만들 수 있을겁니다. 멋진 그래프를 그리기 위해 마커설정과 글씨 넣는 방법을 정리해봤습니다.
그래프에 점 넣기
점을 넣으려면 scatter를 이용하면 됩니다. matplotlib는 그래프 겹치기가 가능한 라이브러리라는 것을 이용하면 되는데 다음과 같이 합니다.
import matplotlib.pyplot as plt
# x와 y 좌표 지정
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 18, 20]
# 그래프를 그리기
plt.plot(x, y)
# 원하는 위치에 점 넣기(3,13)
plt.scatter(3, 13, color='red', marker='o', label='Point')
# 레이블을 추가
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 그래프에 범례 추가
plt.legend()
# 그래프 보기
plt.show()
마커 설정
아래 표는 matplotlib 공식 가이드에서 발췌한 마커 설정표입니다. 원하는 모양을 marker 파라미터에 쓰시면 됩니다.
참고로 맨 아래는 mathtext를 입히는 방법인데 \$...\$ 가 아니라 달러만 표시됩니다. \\ 표시는 무시하시기 바랍니다. 블로그에 math 쓰기 설정을 해놨더니 저렇게 나오네요ㅜ
marker | symbol | description |
---|---|---|
"." | point | |
"," | pixel | |
"o" | circle | |
"v" | triangle_down | |
"^" | triangle_up | |
"<" | triangle_left | |
">" | triangle_right | |
"1" | tri_down | |
"2" | tri_up | |
"3" | tri_left | |
"4" | tri_right | |
"8" | octagon | |
"s" | square | |
"p" | pentagon | |
"P" | plus (filled) | |
"*" | star | |
"h" | hexagon1 | |
"H" | hexagon2 | |
"+" | plus | |
"x" | x | |
"X" | x (filled) | |
"D" | diamond | |
"d" | thin_diamond | |
"|" | vline | |
"_" | hline | |
0 (TICKLEFT) | tickleft | |
1 (TICKRIGHT) | tickright | |
2 (TICKUP) | tickup | |
3 (TICKDOWN) | tickdown | |
4 (CARETLEFT) | caretleft | |
5 (CARETRIGHT) | caretright | |
6 (CARETUP) | caretup | |
7 (CARETDOWN) | caretdown | |
8 (CARETLEFTBASE) | caretleft (centered at base) | |
9 (CARETRIGHTBASE) | caretright (centered at base) | |
10 (CARETUPBASE) | caretup (centered at base) | |
11 (CARETDOWNBASE) | caretdown (centered at base) | |
'\$...\$' | Render the string using mathtext. E.g "$f$" for marker showing the letter f. |
출처 : https://matplotlib.org/stable/api/markers_api.html
글씨 쓰기
이번엔 글씨 쓰는 법입니다.
annotate라는 메쏘드를 이용하면 할 수 있습니다.
파라미터가 꽤 있는데 글씨 쓰는데 필요한 주요 파라미터만 설명하겠습니다.
matplotlib.pyplot.annotate(text, xy, xytext=None, xycoords='data', textcoords=None, arrowprops=None, annotation_clip=None )
- text(str) : 그래프에 넣을 문자를 입력합니다.
- xy(float,float) : text 표시할 위치, 즉, 좌표를 입력합니다.
- xytext(float,float) : xy에서 다소 떨어지게 만듭니다. 예를 들어, (3,13)에 xy를 지정하면 점과 겹쳐 나옵니다. xytext를 (0,10)으로 설정하면 (3,13)에서 위쪽으로 조금 떨어지게 됩니다.
- textcoords : xy와 xytext의 좌표시스템을 설정합니다.
아래 표와 같이 3개 값 중 하나를 넣을 수 있습니다.
Value | Description |
---|---|
'offset points' | Offset, in points, from the xy value |
'offset pixels' | Offset, in pixels, from the xy value |
'offset fontsize' | Offset, relative to fontsize, from the xy value |
- horizonalalignmnet or ha : 글정렬입니다. 디폴트는 어울리는 곳으로 하는 것 같습니다(선과 안 닿게되는 곳?).
{'left','center','right'} 세 개중 하나를 넣으시면 됩니다.
적용하기
아까 위에서 찍은 점의 좌표에 글씨로 표시를 하겠습니다.
import matplotlib.pyplot as plt
# x와 y 좌표 지정
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 18, 20]
# 그래프 그리기
plt.plot(x, y)
# 원하는 위치에 점을 표시하고 좌표를 글씨로 표시하기
x_point = 3
y_point = 13
plt.scatter(x_point, y_point, color='red', marker='o', label='Point')
plt.annotate(f'({x_point}, {y_point})', (x_point, y_point), textcoords="offset points", xytext=(0, 10), ha='center',)
# 레이블 추가
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 범례 추가
plt.legend()
# 그래프 보여주기
plt.show()
화살표 그리기
보통 글씨를 쓰면 보기 편하게 하기 위해서 화살표와 함께 쓰기 마련입니다. 선과 겹치지 않게 글씨도 쓰고 그래프를 좀 더 깔끔하게 할 수 있습니다.
화살표도 annotate 메쏘드를 씁니다.
arrowprops 파라미터를 쓸건데 딕셔너리로 입력해야하고 옵션이 굉장히 많습니다. 이번 포스팅에는 다 담을 수 없어 정리해서 추후에 따로 포스팅하도록 하겠습니다.
간단한 예시입니다.
import matplotlib.pyplot as plt
# x와 y 좌표 지정
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 18, 20]
# 그래프를 그리기
plt.plot(x, y)
# 원하는 위치에 점을 표시하고 좌표를 글씨로 표시하기
x_point = 3
y_point = 13
plt.scatter(x_point, y_point, color='red', marker='o', label='Point')
plt.annotate(f'({x_point}, {y_point})', (2.5, 14.8), textcoords="offset points", xytext=(0, 10), ha='center')
# 화살표를 추가
arrow_start = (2.5, 15) # 화살표 시작점
arrow_end = (3, 13.7) # 화살표 끝점
plt.annotate('', arrow_end, arrow_start, arrowprops={'arrowstyle': '->', 'color': 'green'})
# 레이블 추가
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 범례 추가
plt.legend()
# 그래프 보여주기
plt.show()
화살표를 그릴려면 시작점과 끝점을 그립니다. arrowprops의 옵션을 잘 안다면 좌표를 일일히 조정하지 않아도 되지만 그렇지 않다면 좌표를 조정하면서 그리면 어찌어찌 그려집니다. 또한, 글씨와 매칭할 수 있도록 좌표를 잘 지정해주어야 합니다.글씨 좌표도 조정이 필요할수도 있습니다.
마치며
선 위에 글씨와 점 넣는 방법, 화살표 넣는 방법에 대한 내용이었습니다. 메쏘드만 알아도 쉽게 할 수 있습니다. matplotlib는 프레젠테이션보다는 가장 빠르게 원하는 걸 그려내고 시각화하는데에 초점이 맞춰져 있는 거라서 으리으리한 그래프는 그리지 못하지만 적어도 그래프에 내가 표현하고 싶은걸 다 표현한다면 데이터 영감을 받을 때 도움이 될 것 같습니다.
함께 보면 좋은 글
[matplotlib]plt 라벨(label) 위치설정
마커 가이드 사이트 : https://matplotlib.org/stable/api/markers_api.html
'Python > 그래프 그리기' 카테고리의 다른 글
[Matplotlib] figure와 axes 직접 제어하는 방법 (0) | 2024.03.14 |
---|---|
[Matplotlib] 애니메이션 만들기 초간단 방법 (0) | 2024.03.11 |
파이썬 matplotlib 그래프 축 없애기 (0) | 2022.10.11 |
[Python] seaborn color 팔레트 (0) | 2022.05.25 |
[Python] boxplot 그리기(matplotlib,seaborn) (2) | 2022.05.24 |