Matplot에서 텍스트(plot text)를 추가하는 방법은 다양하며, 플롯에 설명, 레이블, 주석 등을 추가할 때 유용합니다. 아래에 Matplotlib에서 텍스트를 다루는 주요 방법과 예시 하나씩 적어보겠습니다.
1. 기본 텍스트 추가: plt.text()
plt.text()
는 플롯의 특정 위치에 텍스트를 추가하는 함수입니다.
plt.text(x, y, text, fontsize=12, color='black', ha='center', va='center')
x
,y
: 텍스트가 위치할 좌표.text
: 추가할 텍스트.fontsize
: 텍스트 크기.color
: 텍스트 색상.ha
: 수평 정렬 ('center'
,'left'
,'right'
).va
: 수직 정렬 ('center'
,'top'
,'bottom'
).
2. 주석 추가: plt.annotate()
plt.annotate()
는 텍스트와 화살표를 함께 추가하여 특정 데이터 포인트를 설명할 때 사용합니다.
plt.annotate(text, xy, xytext, arrowprops=dict(arrowstyle='->'))
text
: 주석 텍스트.xy
: 화살표가 가리킬 좌표.xytext
: 텍스트가 위치할 좌표.arrowprops
: 화살표 스타일 설정.
3. 제목 및 레이블 추가
- 제목:
plt.title()
- x축 레이블:
plt.xlabel()
- y축 레이블:
plt.ylabel()
4. 텍스트 속성 설정
텍스트의 스타일을 다양하게 설정할 수 있습니다. 주요 속성은 다음과 같습니다:
fontsize
: 텍스트 크기.color
: 텍스트 색상.fontweight
: 글자 두께 ('bold'
,'normal'
).fontstyle
: 글자 스타일 ('italic'
,'normal'
).bbox
: 텍스트 주변에 박스 추가.
5. 수학 표현식 추가 (LaTeX)
Matplotlib은 LaTeX 문법을 지원하여 수학 표현식을 추가할 수 있습니다.$...$
안에 LaTeX 문법을 작성하면 됩니다.
plt.text(2, 5, r'$\alpha = \beta^2 + \gamma$', fontsize=14, color='green')
6. 텍스트 회전
rotation
매개변수를 사용하여 텍스트를 회전시킬 수 있습니다.
plt.text(2, 5, 'Rotated Text', fontsize=12, color='purple', rotation=45)
7. 텍스트 위치 조정
ha
(horizontal alignment): 수평 정렬 ('left'
,'center'
,'right'
).va
(vertical alignment): 수직 정렬 ('top'
,'center'
,'bottom'
).
8. 여러 줄 텍스트 추가
\n
을 사용하여 여러 줄의 텍스트를 추가할 수 있습니다.
9. 텍스트 배경 추가
bbox
매개변수를 사용하여 텍스트 주변에 배경을 추가할 수 있습니다.
plt.text(2, 5, 'Text with Background', fontsize=12, color='white',
bbox=dict(facecolor='black', alpha=0.7))
10. 텍스트 위치를 데이터 좌표 대신 Figure 좌표로 지정
transform
매개변수를 사용하여 텍스트 위치를 Figure 좌표 (0~1 범위)로 지정할 수 있습니다.
plt.text(0.5, 0.5, 'Figure Text', fontsize=12, color='navy',
transform=plt.gcf().transFigure)
plt.text()
: 특정 좌표에 텍스트 추가.plt.annotate()
: 텍스트와 화살표를 함께 추가.plt.title()
,plt.xlabel()
,plt.ylabel()
: 제목 및 축 레이블 추가.- LaTeX 문법: 수학 표현식 추가.
bbox
,rotation
,ha
,va
: 텍스트 스타일 및 위치 조정.
Plot text Code
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
plt.plot(x, y, marker='o')
for i, txt in enumerate(['A', 'B', 'C', 'D', 'E']):
plt.text(x[i], y[i], txt, fontsize=12, rotation=-5)
plt.title('Multiple Text Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.show()
