Python Matplotlib调用本地字体解决中文乱码指南
本文详细介绍在Python中使用Matplotlib绘图时如何调用本地字体。通过修改fontManager配置、全局设置plt.rcParams以及局部设置fontproperties参数,实现中文字体(如微软雅黑、等线)的正常显示。同时提供清除缓存和动态设置字体的具体操作步骤,解决绘图中的中文乱码与负号显示异常问题。
Matplotlib字体管理基础
Matplotlib库中的字体管理功能封装在font_manager子模块中。通过访问fontManager.ttflist列表,可以查看当前Matplotlib环境支持的所有可用字体文件。
>>> import matplotlib.pyplot as plt
>>> from matplotlib.font_manager import fontManager
>>> print(fontManager.ttflist[0]) #此为字体文件
<Font 'cmmi10' (cmmi10.ttf) normal normal 400 normal>
Font类主要包含七个核心属性,用于定义字体的具体特征。
| ‘fname' | ‘name' | ‘size' | ‘stretch' | ‘style' | ‘variant' | ‘weight' |
|---|---|---|---|---|---|---|
| 存储路径 | 字体名 | 尺寸 | 拉伸方式 | 斜粗风格 | 变体 | 粗细 |
全局与局部字体设置方法
若需全局统一设置绘图字体,可修改plt.rcParams配置。例如,将默认字体设置为等线字体,可实现整体风格的统一。
plt.rcParams['font.sans-serif'] = 'DengXian'
plt.text(0,0,'测试',fontsize=20)
plt.show()
修改配置后的实际绘图效果如下图所示。

由于系统中预置的字体文件数量庞大,逐一展示并不现实。因此,接下来的示例将尝试在单张图中展示前100个字体的显示效果。
需要注意的是,rcParams主要影响坐标轴属性。若要在局部文本中启用特定字体,可通过plt.text函数中的fontproperties参数进行单独设置,以实现局部字体的自定义。
import numpy as np
from matplotlib.font_manager import FontProperties
x,y = np.indices([10,10]).reshape(2,100)/10
for i in range(100):
font = fontManager.ttflist[i]
plt.text(x[i],y[i],f"测试:{font.name}",
fontsize=10, ha='left', va='bottom',
fontproperties = FontProperties(fname=font.fname))
plt.show()
通过上述局部设置方法,可以得到如图所示的测试字体效果。

在绘图时,只要选择支持中文的本地字体,即可有效避免中文内容出现乱码的问题。
补充说明
配置微软雅黑字体解决中文乱码
以下是Python绘图时显示微软雅黑字体的具体实现步骤。
第一步,安装必要的库:pip3 install matplotlib。
第二步,向Matplotlib添加中文字体Microsoft YaHei(微软雅黑)。
Matplotlib默认无法显示中文字符,根本原因在于其未内置中文字体文件。因此,只需将中文字体文件导入Matplotlib的字体目录即可解决该问题。
从网络下载微软雅黑的ttf格式字体文件,文件名为Microsoft YaHei.ttf。
找到Matplotlib的字体安装目录,路径通常为D:\python\Lib\site-packages\matplotlib\mpl-data(在新电脑环境中,若Python安装在C盘python39目录下,路径会相应调整)。
进入该目录后,找到mpl-data/fonts/ttf/文件夹,这就是Matplotlib引入字体的标准路径。将下载好的微软雅黑字体ttf文件复制并粘贴到该文件夹中。
第三步,修改Matplotlib的默认字体配置文件。
找到mpl-data/matplotlibrc文件,这是Matplotlib的核心配置文件。
在配置文件中搜索font.family字段。找到font.family: sans-serif这一行,删除行首的#号以取消注释。此时,Matplotlib的默认字体族将被更新为:
font.family : sans-serif
继续在配置文件中搜索font.sans-serif字段。同样删除行首的#号取消注释,并在该配置列表的最前方添加Microsoft YaHei。
font.sans-serif : Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
经过上述配置,Matplotlib在渲染sans-serif字体时,会优先尝试使用Microsoft YaHei。由于该字体支持中文,从而实现了中文字体的正常展示。
此外,建议去掉(axes.unicode_minus : True)这一行的注释,并将True改为False。这一步用于确保负号能够正常显示(此步骤可选,视具体需求而定)。
第四步,清除字体缓存(此步骤可选)。
为了立即看到配置生效的效果,建议清除Matplotlib之前生成的缓存文件。打开~/.matplotlib路径,可以看到fontList.json和tex.cache两个文件。其中fontList.json是字体列表的缓存,可以执行rm -rf fontList.json命令将其删除。
动态设置字体的简便方案
第五步,介绍一种更简便的动态设置中文显示方法。
每次绘图时,可以通过代码动态设置字体,无需修改配置文件。
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签(动态设置)
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
以上即为Python绘图时调用本地字体及解决中文显示问题的完整流程。更多关于Python调用本地字体的详细信息,请参阅本站其他相关文章。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









