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

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

本文详细介绍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 相关产品和应用

全部下载

专题列表