Python Matplotlib调用本地字体解决中文乱码指南

沈知远
沈知远
发布时间:2026-10-15| 3人浏览过
原创

本文详细介绍在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调用本地字体的详细信息,请参阅本站其他相关文章。

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

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 算法库。