파이썬 차트 한글 깨짐
파이썬 코드로 차트 출력하는 예시를
확인하려고 코드를 정리하고 돌려봤습니다.
그런데 이게 왠걸.
차트에 한글이 깨져서 나왔습니다.
import pandas as pd
import matplotlib.pyplot as plt
# 가상의 주식 가격 데이터 생성
data = {'날짜': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06', '2023-01-07'],
'가격': [100, 105, 98, 110, 115, 108, 120]}
df = pd.DataFrame(data)
# 이동평균선 계산
window = 3 # 이동평균선의 기간
df['이동평균선'] = df['가격'].rolling(window=window).mean()
# 차트 그리기
plt.plot(df['날짜'], df['가격'], label='주식 가격')
plt.plot(df['날짜'], df['이동평균선'], label=f'{window}일 이동평균선')
# 차트 스타일 설정
plt.xlabel('날짜')
plt.ylabel('가격')
plt.title('주식 가격과 이동평균선')
plt.legend()
# 차트 출력
plt.show()
숫자는 잘 나오는데 한글만 깨진걸 보면
한글 가져오는 데서 문제가 있다는 걸
단번에 알 수 있었습니다.
원인을 여러방면을 찾아보면서 한글 폰트 가져오는 데서
문제가 있음을 알 수 있었습니다.
그래서 코드를 다음과 같이
수정하였습니다.
import pandas as pd
import matplotlib.pyplot as plt
# 한글 폰트 사용을 위해서 세팅
from matplotlib import font_manager, rc
font_path = "C:/Windows/Fonts/KoPubBatangBold.TTF"
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)
# 가상의 주식 가격 데이터 생성
data = {'날짜': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06', '2023-01-07'],
'가격': [100, 105, 98, 110, 115, 108, 120]}
df = pd.DataFrame(data)
# 이동평균선 계산
window = 3 # 이동평균선의 기간
df['이동평균선'] = df['가격'].rolling(window=window).mean()
# 차트 그리기
plt.plot(df['날짜'], df['가격'], label='주식 가격')
plt.plot(df['날짜'], df['이동평균선'], label=f'{window}일 이동평균선')
# 차트 스타일 설정
plt.xlabel('날짜')
plt.ylabel('가격')
plt.title('주식 가격과 이동평균선')
plt.legend()
# 차트 출력
plt.show()
기존 코드와의 차이점은
코드 상단 부분에
#한글 폰트를 사용하기 위해서 세팅
이라는 주석과 함께 아래 4줄의 코드가
추가되었습니다.
이는
로컬에 있는 폰트 경로를 직접 지정하여
matplotlib에 추가하겠다는 뜻입니다.
참고로 폰트 경로는
C:/Window/Fonts 입니다.
여기서 한글 폰트를 추가하면 되는데
들어가보면 폰트명이 한글로 대부분 되어 있을 겁니다.
하지만 코드에는 영문 폰트를 작성해야합니다.
위의 사진에 HY나무B 보통 폰트를 추가하려 하는데
코드를
font_path = "C:/Windows/Fonts/HY나무B보통.TTF"
이렇게 작성하면 안 됩니다.
이 폰트의 영문명을 작성해야 하는데
영문명은 폰트에 우측 마우스 - 속성으로 들어가
상단에 보이는 영문명을 작성하면 됩니다.
font_path = "C:/Windows/Fonts/HYNAMB.TTF"
이렇게 작성하면 됩니다.
폰트 수정 후 다시 돌리면
한글 폰트에 맞게 한글 출력이 되는 것을 볼 수 있습니다.
https://typenine9.tistory.com/85
https://typenine9.tistory.com/75
https://typenine9.tistory.com/65
https://typenine9.tistory.com/51
https://typenine9.tistory.com/49