matplotlib的中文设置
Python3环境下的matplotlib默认不支持中文字体,其原因为:
(1)matplotlib的内置字体库中没有对应中文字体
(2)matplotlib的配置文件中默认的字体非中文字体
具体的解决方案包括如下步骤:
步骤一:查找matplotlib配置文件目录
matplotlib 从配置文件 matplotlibrc 中读取配置,字体相关内容也在其中。matplotlib 依次在多个位置寻找配置文件,具体路径见官方文档
一般可通过如下方式,查看当前采用的 matplotlibrc
文件:
# 项目python3环境下
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
博主环境下的返回值结果如下:
步骤二:添加字体文件
查看 matplotlibrc 文件,可以看到其默认的font.family
为sans-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文件。
【参考资料】