Python Matplotlib中文显示乱码的完美解决方案

慢慢来
慢慢来
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍Python Matplotlib库中中文显示为方框的原因及完美解决方案。通过扫描系统字体库并自动匹配支持中文的字体,只需调用set_matplot_zh_font()函数即可在绘图前正确设置中文字体,彻底解决中文乱码问题。

Matplotlib中文显示问题原因

原因与现象

Matplotlib是Python中功能强大的图表绘制库,但遗憾的是,其默认版本内置的字体库并不包含中文字体支持。因此,当绘图内容中包含中文时,系统无法正确渲染,导致中文字符显示为方框或乱码。

中文显示解决方案

解决办法

目前存在一种较为完善的解决方案:通过扫描Matplotlib自带的字体库以及操作系统中的系统字体库,查找能够支持中文字体的选项。如果找到符合条件的中文字体,则将其中的第一个字体设置为Matplotlib的默认字体。

实现代码与字体扫描逻辑


import matplotlib.pyplot as plt
from matplotlib.font_manager import FontManager
from pylab import mpl
import subprocess

def get_matplot_zh_font():
 fm = FontManager()
 mat_fonts = set(f.name for f in fm.ttflist)

 output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True)
 zh_fonts = set(f.split(',', 1)[0] for f in output.split('\n'))
 available = list(mat_fonts & zh_fonts)

 print '*' * 10, '可用的字体', '*' * 10
 for f in available:
 print f
 return available

def set_matplot_zh_font():
 available = get_matplot_zh_font()
 if len(available) > 0:
 mpl.rcParams['font.sans-serif'] = [available[0]] # 指定默认字体
 mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

在绘图代码执行之前,只需调用set_matplot_zh_font()函数即可完成中文字体的设置,无需手动配置复杂的字体路径。

设置效果展示

效果

具体效果如下图所示:

以上所述是小编给大家介绍的Python Matplotlib中文显示完美解决方案详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。