关于Matplotlib作图时中文字体无法显示问题

项目场景:

通过Matplotlib作图时,遇到图表标签、标题中文字体显示不出来的问题。


问题描述

在使用Matplotlib作图时,设定字体为SimHei,但运行提示没发现这个字体,返回用DejaVu Sans来显示。DejaVu Sans字体无法显示中文。

import matplotlib.pyplot as plt

plt.rcParams[font.sans-serif] = [SimHei]
plt.rcParams[axes.unicode_minus] = False

原因分析:

提示:一开始以为是系统字体问题,系统安装了字体后还是没解决。经查看是Matplotlib里没相关的中文字体。

一开始根据提示系统无该字体,就安装该字体。

我使用的是云服务器,安装了文泉驿黑字体,并将Matplotlib作图font.family设置为文泉驿黑。

但运行后中文字体还是显示不出来。

随后运行以下Python代码查看Matplotlib有哪些字体。

import matplotlib.pyplot as plt
from matplotlib import font_manager
 
for font in font_manager.fontManager.ttflist:
    print(font.name, -, font.fname)

经查看系统中已安装的文泉驿黑字体不在列表里面。

故障问题可能是由于Matplotlib没有相关的中文字体,因而在使用过程中无法显示中文。


解决方案:

提示:通过同步重建解决问题。或者通过引入字体属性模块font_manager。

一、通过系统中字体同步到Matplotlib

目前是系统中有中文字体,但是Matplotlib中没有相关中文字体,只需要把系统中的中文字体同步到Matplotlib即可。

运行以下Python代码进行同步。

from matplotlib.font_manager import _rebuild

_rebuild()

再来Matplotlib作图时中文字体显示出来了。

该方法只适用于matplotlib是3+以下版本,因为3+及以上版本弃用_rebuild了。

二、通过使用字体属性模块

引入字体属性模块。

from matplotlib.font_manager import FontProperties

字体配置路径。

font = FontProperties(fname=/usr/share/fonts/truetype/arphic/wenquanyihei.ttc)

使用的话例如给图标标题设置标签。

ax.set_title("平方数",fontproperties=font)
经验分享 程序员 微信小程序 职场和发展