Repository navigation
Expand file tree
/
Copy pathkrfont.py
More file actions
58 lines (45 loc) · 2.28 KB
/
Copy pathkrfont.py
File metadata and controls
58 lines (45 loc) · 2.28 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""matplotlib 한글 폰트 설정.
matplotlib 은 기본 폰트에 한글 글자가 없어서, 아무 설정 없이 한글 제목을 넣으면
글자가 전부 네모(□□□)로 나옵니다. 한국어로 그래프를 그릴 때 가장 먼저,
그리고 거의 매번 만나는 문제입니다.
이 모듈은 step09_module 에서 배운 '모듈로 빼서 재사용' 을 실제로 쓴 예이기도 합니다.
같은 설정을 파일 7개에 복사해 두는 대신 여기 한 곳에 두고 import 합니다.
import krfont
krfont.apply()
"""
from matplotlib import font_manager, rcParams
# 운영체제별로 기본 탑재된 한글 폰트가 다릅니다. 위에서부터 찾아 씁니다.
CANDIDATES = [
'AppleGothic', # macOS
'Apple SD Gothic Neo', # macOS
'Malgun Gothic', # Windows (맑은 고딕)
'NanumGothic', # 나눔고딕 (직접 설치)
'Nanum Gothic',
'NanumBarunGothic',
'Noto Sans CJK KR', # 리눅스
'Noto Sans KR',
]
def available():
"""설치된 폰트 중 한글 후보에 해당하는 것들을 돌려준다."""
installed = {f.name for f in font_manager.fontManager.ttflist}
return [name for name in CANDIDATES if name in installed]
def apply(verbose=True):
"""한글 폰트를 적용하고 적용된 폰트 이름을 돌려준다. 없으면 None."""
# 마이너스 부호 깨짐 방지.
# 한글 폰트 중에는 유니코드 마이너스(−)가 없는 것이 있어서,
# 음수 축 눈금이 네모로 나옵니다. 아스키 하이픈(-)을 쓰게 합니다.
rcParams['axes.unicode_minus'] = False
found = available()
if not found:
if verbose:
print('⚠️ 한글 폰트를 찾지 못했습니다. 제목·범례가 □□□ 로 보일 수 있습니다.')
print(' 리눅스라면 : sudo apt install fonts-nanum 후 아래를 실행하세요')
print(' >>> import matplotlib; matplotlib.font_manager._load_fontmanager(try_read_cache=False)')
return None
rcParams['font.family'] = found[0]
if verbose:
print(f'한글 폰트 적용 : {found[0]} (후보 {len(found)}종 발견)')
return found[0]
if __name__ == '__main__':
print('설치된 한글 폰트 후보 :', available() or '없음')
apply()