현재 matplotlib가 사용하는 font의 family와 size 확인하기.
matplotlib
의 rcParams
(runtime config parameters)에서 확인 가능함.
import matplotlib as mpl
print(f"font.family: {mpl.rcParams['font.family']}"),
print(f"font.size : {mpl.rcParams['font.size']}")
2023.7.12 당시 colab의 경우, 다음과 같은 결과가 나옴.
font.family: ['sans-serif']
font.size : 10.0
현재 matplotlib가 사용가능한 font들 확인하기.
matplotlib
의 font_manager
를 통해 가능함.
import matplotlib.font_manager as fm # to manage font
# font file들의 경로를 가지는 list 반환.
sys_fonts=fm.findSystemFonts()
print(f"# of sys_font_family : {len(sys_fonts)}")
print(sys_fonts)
# Debian, Ubuntu등에서 사용가능한 Nanum fonts 확인.
nanum_fonts = [f for f in sys_fonts if 'Nanum' in f]
print(f"# of nanum_font family: {len(nanum_fonts)}")
print(nanum_fonts)
# 현재 FontEntry들을 출력 (ttf파일 기준)
ttf_fonts = fm.fontManager.ttflist
print(f"# of ttf_font entries: {len(ttf_fonts)}")
# for f in ttf_fonts:
# print(f.name)
# 현재 Nanum font관련 FontEntry들을 출력 (ttf파일 기준)
nanum_font_entries = [f for f in ttf_fonts if 'Nanum' in f.name]
print(f"# of nanum ttf_font entries: {len(nanum_font_entries)}")
# for f in ttf_fonts:
- colab의 경우, 기본적으로 한글 폰트를 설치해줘야 하며,
- 위의 코드 수행시 설치된 nanum font의 갯수가 0으로 나오는게 정상임.
Ubuntu, Debian계열에서 nanum font설치하기.
apt update
apt install fonts-nanum*
- Jupyter notebook에서 수행시
!
를 앞에 추가해주어야함 (외부 명령어) - 일반적으로는 위의 명령어들을
sudo
로 수행시켜야 하나, colab의 경우엔sudo
없이 가능.
2023.7.12 당시, 31개의 nanum font들이 설치된다.
system에 nanum font들이 추가설치된 것이지,
matplotlib가 사용가능한 font entry로는 추가된 것이 아님.
한글 위한 FontEntry 생성 및 추가
앞서 matplotlib.font_manager
의 sys_fonts
를 통해 얻은 한글을 지원하는 nanum font의 ttf 파일 경로를 토대로,matplotlib.font_manager.FontProperties
를 통해 ttf파일에 font 이름을 얻어내고,
이들을 바탕으로 matplotlib.font_manager.FontEntry
객체를 생성한 후,
생성된 FontEntry
객체를 matplotlib.font_manager.fontManager.ttflist
에 추가해주면 된다.
# ttf 파일로부터 font 정보 얻기.
ttf_path = nanum_fonts[0]
font_name = fm.FontProperties(fname=ttf_path, size=10).get_name()
# FontEntry만들기
fe = fm.FontEntry(
fname=ttf_path, # ttf 파일이 저장되어 있는 경로
name=font_name # font_name
)
# matplotlib에 font추가.
fm.fontManager.ttflist.append(fe) # Matplotlib에 폰트 추가
# fm.fontManager.ttflist.insert(0, fe)
mpl.rcParams.update({'font.size': 18, 'font.family': font_name}) # 폰트 설정 (dict의 update임)
ttflist
는 Python의 list이며,rcParams
는 dictionary임.rcParams
는matplotlib.pyplot
을 통해서도 접근 가능.
Test
다음 코드는 간단하게 한글이 출력되는지를 확인 가능함.
import matplotlib.pyplot as plt
import numpy as np
data = np.arange(10,30,1)
plt.figure(figsize=(5,4))
plt.plot( data, 'ok')
plt.title('한글 테스트')
plt.ylabel('y축')
plt.xlabel('x축')
plt.show()
결과는 다음과 같음.
참고로, label에서 nanum font 사용시 minus기호가 깨진다.
이를 제대로 출력하기 위해선 다음의 설정이 필요하다.
mpl.rcParams['axes.unicode_minus'] = False
gist url
https://gist.github.com/dsaint31x/537f27ec5506e7c539279a5c2c472405
참고자료
matplotlib 버전이 올라가서 아래 url대로 하면 동작이 안된다. 하지만 기본적인 내용은 같으며 보다 자세한 설명인지 첨부한다. (font_manager._rebuild 에서 에러가 남.)
local장비에서 특별히 설치 등을 하지 않고 처리할 때는 기존 한글 폰트를 사용하면 됨.
https://mydevjourney.tistory.com/79
runtime config parameter들에 대한 참고 자료.
https://jrc-park.tistory.com/274
'Python > matplotlib' 카테고리의 다른 글
[matplotlib] : backend 란 (0) | 2023.07.20 |
---|---|
[matplotlib]: Figure and Axes (0) | 2023.07.20 |
[Python] matplotlib : Axis Scale and Ticks (0) | 2023.07.14 |
[matplotlib] : Styling Artists and Labeling Plots (0) | 2023.07.14 |
[matplotlib] 계층구조 및 Container : Figure, Axes, Axis (0) | 2023.07.14 |