Matplotlib中调用在线Nanum Gothic韩文字体失效问题求助
解决Matplotlib韩文字体不生效的问题
你当前的核心错误是:把CSS样式表的URL传给font_manager.FontProperties(fname=...)——这个参数需要的是本地字体文件路径/可读取的字体二进制流,而不是网页CSS链接。Matplotlib的字体管理器无法解析CSS中的字体加载逻辑,所以才会提示字体不包含对应Unicode字符,最终显示空白。
下面是两种可行的解决方法:
方法一:直接加载在线字体文件(临时生效)
通过下载字体的TTF文件二进制流,直接传给FontProperties,不用保存到本地:
import matplotlib.pyplot as plt from matplotlib import font_manager import requests from io import BytesIO # 下载Nanum Gothic的TTF字体文件 font_url = "https://fonts.gstatic.com/s/nanumgothic/v27/PN_3Rfi-oW3hYwmKDpxS7F_D-djb.ttf" response = requests.get(font_url) font_file = BytesIO(response.content) # 加载字体 font_prop = font_manager.FontProperties(fname=font_file) # 测试绘图 plt.text(0.5, 0.5, "안녕하세요! Matplotlib 한글 테스트", fontproperties=font_prop, fontsize=15) plt.show()
方法二:全局设置默认字体(永久生效,更方便)
如果不想每次绘图都手动指定字体,可将Nanum Gothic设为Matplotlib默认字体,同时解决负号显示方块的问题:
import matplotlib.pyplot as plt from matplotlib import font_manager import requests import os # 字体保存到Matplotlib自动扫描的目录 font_dir = os.path.join(os.path.expanduser("~"), ".matplotlib", "fonts", "ttf") os.makedirs(font_dir, exist_ok=True) font_path = os.path.join(font_dir, "NanumGothic.ttf") # 下载字体到本地(仅第一次运行时下载) if not os.path.exists(font_path): font_url = "https://fonts.gstatic.com/s/nanumgothic/v27/PN_3Rfi-oW3hYwmKDpxS7F_D-djb.ttf" response = requests.get(font_url) with open(font_path, "wb") as f: f.write(response.content) # 刷新字体缓存,让Matplotlib识别新字体 font_manager._load_fontmanager(try_read_cache=False) # 全局配置字体 plt.rcParams["font.family"] = "Nanum Gothic" plt.rcParams["axes.unicode_minus"] = False # 避免负号显示为方块 # 测试绘图 plt.title("한글 제목 테스트") plt.xlabel("X축 라벨") plt.ylabel("Y축 라벨") plt.plot([-1, 2, 3], [4, 5, -6]) # 验证负号显示 plt.show()
注意事项
- 确保已安装
requests库,未安装则执行pip install requests - 若仍显示空白,可尝试更换Nanum系列的其他字体(比如粗体版本
NanumGothicBold.ttf,对应URL为https://fonts.gstatic.com/s/nanumgothic/v27/PN_oRfi-oW3hYwmKDpxS7F_LQv3LyVsj.ttf) - 部分系统可能需要重启Python环境,才能让字体缓存刷新生效
内容的提问来源于stack exchange,提问作者qiannianchong
相关产品推荐
相关产品推荐

