연관 포스트
https://dsminervas2.tistory.com/7
[Python] Colab에서 한글 폰트 깨짐 해결
코랩을 자주 사용하는 편이라 한글이 포함된 데이터 시각화를 할 때마다 폰트가 깨져서 애를 먹었다. 박조은 선생님 (😍) 강의 중에도 나와서 앞으로 써먹으면 되겠다 ! 라고 했는데도 이게 또
dsminervas2.tistory.com
불과 어제,,,
이 글을 작성하고 문제없이 코드도 실행했는데
오늘!!! 또 안된다 😥
사실,, 어제는 임시방편 느낌으로 해결하긴 했는데
전부터 궁금하던, 폰트 목록 확인해 보기!!
오늘 해결함 😉
어휴,, 클리셰인 십 년 묵은 체증이 내려가는 느낌이랄까 😎
또 참고 출처는 박조은 선생님!!! (완전 저에게는 갓조은 선생님 😍)
성격상 석연치 않은 게 있으면 잡고 늘어져서 뜯어보고 파헤치는 편인데,,
혐생을 살다 보면 타협해야 하는 부분도 있더랬다,,, 😌
+) 제목을 '완전 해결'이라는 필두로 너무 두서 없이 적어둔 것 같아 결론만 정리하자면,,
Colab에서 한글 폰트 깨짐 완전 해결 방법 3가지
먼저, 아래 방법대로 하더라도 런타임 재시작이 필요할 수 있고, 스타일 설정 때문에 되돌아갈 수 있으므로,
그래프 출력 직전의 코드를 확인 바람. (깔끔한 whitegrid 스타일이 맘에 들었지만, 한글은 안 되었던 것 같다 😭)
1. koreanize_matplotlib 라이브러리 사용
!pip install koreanize_matplotlib
import koreanize_matplotlib
2. 나눔 글꼴 설치 후 rcParams 혹은 font manager로 폰트 지정
## 나눔 글꼴 설치
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
plt.rcParams['font.family'] = 'NanumGothic'
3. 설치된 폰트 목록 확인 후 폰트 지정
아래 설명 참조. 이 부분은 내가 궁금해서 찾은 방법이고, 나눔 글꼴 설치가 필요하면 위 2번 설치 코드 활용하면 됨.
자! 그럼 폰트가 설치되어 있는 것을 확인해 보자.
matplotlib의 버전 정보와 위치 정보를 확인.
import matplotlib as mpl
import matplotlib.font_manager as fm # 폰트 관리
print ('버전: ', mpl.__version__)
print ('설치 위치: ', mpl.__file__)
print ('설정 위치: ', mpl.get_configdir())
print ('캐시 위치: ', mpl.get_cachedir())
print ('설정파일 위치: ', mpl.matplotlib_fname())
설치된 폰트를 확인해 보자.
총 56개의 폰트가 설치되어 있고, 결과 화면은 길어서 생략 😉
font_list = fm.findSystemFonts(fontpaths=None, fontext='ttf')
# ttf 폰트 전체갯수
print(len(font_list))
font_list
폰트 리스트 중에서 'Nanum'이 들어간 폰트만 찾아 출력해 보자!
[(f.name, f.fname) for f in fm.fontManager.ttflist if 'Nanum' in f.name]
참,, 이게 웃긴 게 분명 아까는 설치가 되지 않았는데,,
몇 번을 런타임 재시작하고도 안 됐었는데 😭
오늘의 새로운 인사이트는 없는 듯하여,, TIL을 넘길까 하던 차에 문제가 생기는 게,, 참 희한하다 😤
여하튼! 처음 나의 해결 방식은 위 리스트 중 설치된 폰트를 변경해 주는 것이었다!!
어제의 코드를 가져와서,,, ( + 추가로 _rebuild() 에러는 해결 못함. 일단 주석처리로 넘어가자.)
import matplotlib.pyplot as plt
# Linux(Colab)
!apt-get install fonts-nanum -qq > /dev/null
!fc-cache -fv
import matplotlib as mpl
# mpl.font_manager._rebuild() <<<<< 여기서 에러 !!
findfont = mpl.font_manager.fontManager.findfont
mpl.font_manager.findfont = findfont
mpl.backends.backend_agg.findfont = findfont
font_family = "NanumBarunGothic"
아래에 rebuild 에러로 추가한 부분 없어도 font_family 값에 위에서 확인한 설치된 한글폰트 이름을 가져와서 적용하면 되는 것이다!! 😁
처음 폰트 리스트를 출력했을 때는 나눔바른고딕이 없어서 에러가 났었고, 나눔고딕을 찾아서 이름을 바꿔 넣어주고 실행했었는데,, 우연히 런타임 다시 시작을 했던가?! 그러고 다시 찾으니 또 나오더라,,, 그래서 위 캡처화면이 😒 나온 것이고, 덮어 실행했기 때문에 ㅋㅋ 이전화면은 사라짐 ㅠ ( 돌아가서 찾는 방법 있었던 것 같은데,,, 귀찮으니 다음에 해보자! )
추가로!
나눔 폰트 설치 코드 첨부함.
폰트 설치를 하고 폰트 검색을 했을 때 나오지 않는다면 런타임 다시 시작을 하고 검색하면 나올 것이다.
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
다음날 추가로,,,
라이브러리 설치로 해결되는 방법도 알게 되었다 😨
이럴 수가,,, 좀 허무하긴 하지만
그래도 내가 고민하고 노력한 흔적은 남아있겠지 😂
!pip install koreanize_matplotlib
import koreanize_matplotlib
koreanize_matplotlib 라이브러리를 설치하면 된다!!!!!!! 😊
출력된 그래프를 보아서는 이전 코드인지 여기 라이브러리인지는 모르겠지만, 그래프 스타일이 달라졌다!
스타일을 바꾸면서 폰트 설정이 초기화되는 경우도 있었던 것 같은데,, (예를들어 whitegrid 라던지,,,)
코랩은 잘 되던 것도 언제 갑자기 말썽을 피울 때가 있다,,,, 😱 (이렇게 말하지만 내가 모르는 것일 수도 있다 ,,,, 🤭)
子曰 不患人之不己知 患不知人也.
공자께서 말씀하길 “남이 나를 알아주지 않음을 걱정하지 말고, 내가 남을 알지 못함을 걱정하라.”
논어(論語)-<학이(學而) 편>16장
여하튼 분명 이 부분에서도 나중에 문제가 생길 수 있는데,, 상황에 따라 두 가지 방법을 적절히 사용하면 될 것 같다 😆
이렇게 글을 쓸 수 있는 것도, 예전 한국어 텍스트 분석하면서 시각화 폰트 깨짐 문제에서 엄청 고생했기 때문이 아니었을까! 그때의 삽질이 헛되지 않음이 뿌듯하다 😎
이렇게 재야의 고수가 되어가는구나 😜
+) 그리고 또 재밌는 거 발견 😜
아래 출처 중 두 번째 글 작성자 분도 나처럼 꽤나 애 먹었었나 보다.
[참고 출처]
https://corazzon.github.io/matplotlib_font_setting
matplotlib 한글폰트 사용하기
20 November 2017 matplotlib 한글폰트 사용하기 1. 필요한 패키지를 가져옵니다. # 그래프를 노트북 안에 그리기 위해 설정 %matplotlib inline # 필요한 패키지와 라이브러리를 가져옴 import matplotlib as mpl impor
corazzon.github.io
https://operstu1.tistory.com/80
<Python matplotlib> matplotlib 한글 폰트 깨짐 수정[진짜 되는 수정] 따라만 하세요
1. 오류의 형태 2. 해결 과정 3. 해결 방법 [바로 해결 방법으로 가실 분은 해결방법을 눌러 이동하세요] 파이썬과 matplotlib 등 모든 언어와 라이브러리가 영어를 주 언어로 사용하다보니 한글 사용
operstu1.tistory.com
'Today I Learned' 카테고리의 다른 글
[Python] DataFrame에서 천(thousand) 단위 구분 콤마 간단 출력 (0) | 2023.12.14 |
---|---|
[Python] Google Colab에서 Mecab 사용하기 (2) | 2023.11.30 |
[Python] Colab에서 한글 폰트 깨짐 해결 (2) | 2023.11.23 |
데이터 분석 프레임 설계를 위한 질문 리스트 (0) | 2023.01.25 |
Topic Modeling (0) | 2023.01.11 |