在前面的应用中,大家应该都发现了这个问题,Matplotlib中的图表信息,英文可以正常显示,但是中文会显示方框,根本原因就是字体库问题,这节带大家解决!


中文显示异常


首先,罗列系统中所有字体库,代码如下:

import matplotlib.pyplot as plt
import matplotlib

a=sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

for i in a:
    print(i)

我这里测试会显示非常多的字体库,效果如下图:

字体库


这里其实有许多我们熟悉的字体,比如STXihei、STKaiti、STFangsong,这不就是细黑、楷体、仿宋吗?没错!SimHei就是黑体!

这个时候我们在Matplotlib绘制图表时候加这句代码就可以了:

plt.rcParams['font.family'] = 'SimHei'  # 替换为你系统里有的字体

也就是说,我们通过设置 plt.rcParams['font.family']这个参数,相当于告诉 Matplotlib 使用选择的字体来渲染中文文本,这样就可以在图表中正确显示中文了

实际上,由于我们写的程序不一定在本机运行,目标机器或者其他电脑不一定安装这个字体库,因此更稳妥的写法,可以通过设置plt.rcParams['font.sans-serif'] 这个参数来设置字体族,从而可以指定多个字体,比如代码

plt.rcParams['font.sans-serif'] = [
    # Windows 优先
    'SimHei', 'Microsoft YaHei',
    # macOS 优先
    'PingFang SC', 'Heiti TC',
    # Linux 优先
    'WenQuanYi Micro Hei', 'DejaVu Sans'
]

这段代码的意思是为'font.sans-serif'字体族准备了六个字体,根据不同操作系统考虑,从而让代码在不同系统上的兼容性更好。

本系列教程为了省心,全部只指定了一个黑体的字体库,即:

plt.rcParams['font.sans-serif'] = ['SimHei']

大家这下就明白了


添加字体族后,重新运行,即得到效果:

修复中文字体显示


一切正常~请大家亲自上机试验~

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)