欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matplotlib的中文设置

程序员文章站 2022-03-21 10:32:11
...

Python3环境下的matplotlib默认不支持中文字体,其原因为:
(1)matplotlib的内置字体库中没有对应中文字体
(2)matplotlib的配置文件中默认的字体非中文字体
具体的解决方案包括如下步骤:

步骤一:查找matplotlib配置文件目录
matplotlib 从配置文件 matplotlibrc 中读取配置,字体相关内容也在其中。matplotlib 依次在多个位置寻找配置文件,具体路径见官方文档
一般可通过如下方式,查看当前采用的 matplotlibrc文件:

# 项目python3环境下
>>> import matplotlib
>>> matplotlib.matplotlib_fname()

博主环境下的返回值结果如下:matplotlib的中文设置
步骤二:添加字体文件
查看 matplotlibrc 文件,可以看到其默认的font.familysans-serif,而该字体是从如下字体中依次选择:

font.sans-serif     :  DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

这些均为西文字体,并不支持中文。我们可以安装支持中文的.ttf 格式字体来使得matplotlib支持中文,如SimHei.ttf(windows下自带)。
matplotlib的字体库路径为matplotlibrc 文件所在文件夹的统计目录,即

matplotlib/mpl-data/fonts

将SimHei.ttf移动到该目录下。

步骤三:修改 matplotlibrc 配置文件
更改的主要有三处地方(注意将该三处地方的备注#放开)
(1)修改font.family

font.family         : sans-serif

(2)在font.sans-serif中置顶SimHei

font.sans-serif     : SimHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

(3)将axes.unicode_minus改为False

axes.unicode_minus  : False

步骤四:清理字体缓存文件
可通过如下方式,查看 matplotlib字体缓存位置:

# 项目python3环境下
import matplotlib
matplotlib.get_configdir()

将该目录下的所有文件删除。

步骤五:重启项目或kernel,中文显示成功。

附:动态配置
以上方式通过修改matplotlib全局配置文件的方式设置了中文字体。在实际操作中,还经常采用动态配置为某个具体项目进行设置。比如这样:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']

当然,上述命令成功的前提是matplotlib字体库中有对应的ttf文件。

【参考资料】

  1. 我们来解决一下 matplotlib 的中文显示问题