Notice
Recent Posts
Recent Comments
Link
관리 메뉴

뛰는 놈 위에 나는 공대생

[Matplotlib] Matplotlib 폰트 스타일 바꾸기 본문

프로그래밍 Programming/파이썬 Python

[Matplotlib] Matplotlib 폰트 스타일 바꾸기

보통의공대생 2023. 1. 13. 15:08

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

 

Fonts in Matplotlib — Matplotlib 3.6.3 documentation

Matplotlib needs fonts to work with its text engine, some of which are shipped alongside the installation. The default font is DejaVu Sans which covers most European writing systems. However, users can configure the default fonts, and provide their own cus

matplotlib.org

https://matplotlib.org/stable/tutorials/text/usetex.html

 

Text rendering with LaTeX — Matplotlib 3.6.3 documentation

Matplotlib can use LaTeX to render text. This is activated by setting text.usetex : True in your rcParams, or by setting the usetex property to True on individual Text objects. Text handling through LaTeX is slower than Matplotlib's very capable mathtext,

matplotlib.org

https://matplotlib.org/stable/tutorials/text/mathtext.html#mathtext-fonts

 

Writing mathematical expressions — Matplotlib 3.6.3 documentation

Note Click here to download the full example code Writing mathematical expressions You can use a subset of TeX markup in any Matplotlib text string by placing it inside a pair of dollar signs ($). Note that you do not need to have TeX installed, since Matp

matplotlib.org

 

Comments