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

2023. 1. 13. 15:08·프로그래밍 Programming/파이썬 Python

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

 

저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 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
'프로그래밍 Programming/파이썬 Python' 카테고리의 다른 글
  • [JAX] JAX 설치 및 GPU 사용하기
  • [Matplotlib] legend 그림 바깥에 배치/원하는 위치에 배치
  • [PyTorch] 특정 조건에 맞는 텐서 출력/인덱싱 등
  • [Pytorch] multi-output일 때 input gradient 구하기
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (459) N
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (21)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 유학 생활 Daily (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    pytorch
    고체역학
    obsidian
    생산성
    Julia
    MATLAB
    Statics
    우분투
    matplotlib
    LaTeX
    텝스
    서버
    인공지능
    ChatGPT
    Linear algebra
    Dear abby
    수치해석
    딥러닝
    에러기록
    텝스공부
    IEEE
    Zotero
    WOX
    옵시디언
    teps
    Numerical Analysis
    논문작성
    논문작성법
    Python
    JAX
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[Matplotlib] Matplotlib 폰트 스타일 바꾸기
상단으로

티스토리툴바