일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 수치해석
- WOX
- Dear abby
- MATLAB
- 옵시디언
- 에러기록
- ChatGPT
- matplotlib
- Python
- 고체역학
- Julia
- LaTeX
- Linear algebra
- 딥러닝
- 텝스
- IEEE
- Zotero
- 우분투
- 텝스공부
- 논문작성
- 인공지능
- JAX
- 생산성
- Numerical Analysis
- Statics
- teps
- pytorch
- 수식삽입
- obsidian
- 논문작성법
- Today
- Total
뛰는 놈 위에 나는 공대생
[Matplotlib] Matplotlib 폰트 스타일 바꾸기 본문
Matplotlib에서 figure에 사용되는 font를 보면 Dejavu sans라는 폰트라는데
위와 같은 폰트를 말한다.
실제 그림을 그리면 x, y축이 다음과 같은 폰트로 나온다.
(아래 코드에서 mpl.rcParams는 default 옵션인데 자세한 내용은 matplotlib의 디폴트 속성 글을 보면 나와있다.)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['legend.fontsize'] = 16
mpl.rcParams['figure.titlesize'] = 18
mpl.rcParams['axes.titlesize'] = 18
mpl.rcParams['lines.linewidth'] = 2.0
mpl.rcParams['axes.labelsize'] = 18
mpl.rcParams['xtick.labelsize'] = 14
mpl.rcParams['ytick.labelsize'] = 14
plt.rcParams['text.usetex'] = True
x = np.array(list(range(10)))
y = x * x +2
plt.plot(x,y)
plt.ylabel('y axis')
plt.xlabel('x axis')
plt.show()
만약 latex를 사용하겠다고 설정할 경우에 폰트는 그대로인데 글씨 크기가 살짝 바뀌는 현상이 일어났다.
그런데 이런 폰트는 내가 보던 논문들에서 쓰던 폰트와는 느낌이 다르고, LaTeX를 썼을 때 폰트 차이가 두드러져서 별로라는 생각이 들었다. 그래서 찾은 Matplotlib에서 폰트를 바꾸는 방법이다.
여기서 LaTeX를 사용하는지 아닌지를 고려한 이유는 다음 링크에서 알 수 있듯이 LaTeX와 함께 쓸 때는 폰트 적용이 달라지는 것으로 보이기 때문이다. 당장은 LaTeX 없이 사용한다.
1. LaTeX 사용 안하고 폰트 family 변경
plt.rcParams['text.usetex'] = False
plt.rcParams['font.family'] = 'serif'
matplotlib에서 옵션으로 제공하는 font family는 다음과 같다.
다음과 같은 5종류이다.
1) serif
serif 체와 sans serif 체의 차이는 글꼴 밑의 삐침이라고 한다. 자세한 내용은 폰트 전문가 분들의 글을 읽으면 된다.
2) sans-serif
앞에서 본 default 속성과 동일하다.
3) cursive
4) fantasy
흥미로운 사실은 font family라는 이름에 충실하게 폰트 다운받을 때 분류에 fantasy로 되어있는 폰트들과 유사한 폰트로 지정이 된다.
5) monospace
여기까지가 LaTeX를 안 쓸 때의 폰트 스타일이다.
그 다음으로는 LaTeX를 쓸 때 텍스트 렌더링이다. 공식 문서에서는 다음과 같은 폰트 패밀리를 제공해주는 것으로 보인다.
1) serif
MATLAB에서도 LaTeX로 컴파일하면 computer modern체(레이텍 기본 폰트)로 나오는데 딱 이 스타일이다.
2) sans-serif (하이픈 주의)
3) cursive
4) monospace
참고로 LaTeX를 쓰면 플롯을 그리는데 더 오래 걸리는데 요상한 폰트를 쓸 수록 더 오래 걸리는 것 같다(..)
웬만하면 기본으로 주어지는 것 안에서 쓰는 게, 다른 사람들과의 플롯과도 큰 차이가 안 나서 좋기도 하다.
또한 위에서 'fantasy'라는 폰트 패밀리가 있었는데 이를 LaTeX를 켠 상태에서 쓰면 그냥 default 폰트가 나온다.
plt.rcParams['text.usetex'] = True
plt.rcParams['font.family'] = 'fantasy'
즉, LaTeX를 사용한 상태에서 쓸 수 있는 폰트가 제한된다는 뜻이다.
더 자세한 내용은 아래 참고자료를 보면 좋다.
참고자료
https://matplotlib.org/stable/users/explain/fonts.html
https://matplotlib.org/stable/tutorials/text/usetex.html
https://matplotlib.org/stable/tutorials/text/mathtext.html#mathtext-fonts
'프로그래밍 Programming > 파이썬 Python' 카테고리의 다른 글
[JAX] JAX 설치 및 GPU 사용하기 (2) | 2023.02.09 |
---|---|
[Matplotlib] legend 그림 바깥에 배치/원하는 위치에 배치 (0) | 2023.01.14 |
[PyTorch] 특정 조건에 맞는 텐서 출력/인덱싱 등 (2) | 2023.01.08 |
[Pytorch] multi-output일 때 input gradient 구하기 (0) | 2023.01.03 |
[에러기록] matplotlib에서 figure만 그려지고 plot이 없는 경우 (0) | 2022.12.27 |