在使用 Matplotlib 绘制图表时,如果标题、标签、注释等包含了中文文本,有时会出现中文显示为方块或者乱码的情况。这是因为 Matplotlib 默认使用的字体可能不支持中文。
想要解决 Matplotlib 中文乱码,最常用的方法是指定一个支持中文的字体。我们可以通过修改 Matplotlib 的配置参数来实现。
Matplotlib 的配置参数存储在 plt.rcParams 这个字典中。比如我们可以通过修改 plt.rcParams['font.family'] 参数来设置字体。
示例:Matplotlib 解决中文乱码
import matplotlib.pyplot as plt
# 解决中文乱码
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
# 解决负号不显示
plt.rcParams['axes.unicode_minus'] = False
# 绘图
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y)
# 定义标题
plt.title('一个折线图')
plt.xlabel('x轴标题')
plt.ylabel('y轴标题')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
如果图表中包含中文,就必须使用 plt.rcParams['font.family'] 来设置中文字体,不然就会有乱码效果。如果图表中包含符号(-),也必须设置 plt.rcParams['axes.unicode_minus'] 为 False。
在实际工作中,我们都建议在绘图的一开始处,统一加上下面这两句代码。
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False # 解决负号不显示plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 这句代码将 Matplotlib 的字体设置为 “SimHei(黑体)” 或 “PingFang SC(苹方)” 。font.family 可以接受一个包含多个字体名称的列表,Matplotlib 会按顺序尝试使用列表中的字体,直到找到可用的字体为止。
plt.rcParams['axes.unicode_minus'] = False 这句代码用于解决在某些字体下,负号可能会显示为方块的问题。
