本文示例文件已上传至我的
Github
仓库https://github.com/CNFeffery/DataScienceStudyNotes
1 简介
matplotlib
作为数据可视化的利器,被广泛用于数据分析之中,但不太友好的是matplotlib
中书写非英文文字内容时,如果不事先对字体进行相关设置,会发现绘制出的诸如中文等均显示为方块乱码,而今天的内容,我们就来小小总结一下matplotlib
中字体设置的常用技巧。
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195347565-881604500.jpg)
2 在matplotlib中设置字体的常用方法
在matplotlib
中设置字体的方法按作用范围可分为全局设置与临时设置:
2.1 在matplotlib中设置全局字体
我们在默认状态下使用matplotlib
书写中文内容时之所以显示出乱码,是因为matplotlib
默认的字体为英文字体,导致许多unicode
编码的语言文字都无法书写。
而全局设置字体的方式,指的是我们可以通过修改本地配置文件或在程序开头设置字体相关参数,从而人为地为当前kernel下的matplotlib
规定使用指定的字体,主要有以下几种情况:
- 使用系统自带字体
所谓系统自带字体,譬如对于windows
,其系统盘Windows/Fonts
下的诸多已安装到系统中的字体:
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195350807-1126192950.png)
当然,matplotlib
可以检测到的字体不止上述的这些,我们可以通过下列方式查看matplotlib
中默认已经识别到的所有可用字体:
import matplotlib.pyplot as plt
from matplotlib import font_manager
for font in font_manager.fontManager.ttflist:
# 查看字体名以及对应的字体文件名
print(font.name, '-', font.fname)
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195354398-1861041574.png)
其中在font_manager.fontManager.ttflist
中迭代到的每个对象,其name
属性即为我们下面设置字体要使用到的名称,以华文琥珀为例,我们先查看到其对应的字体文件名称:
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195358142-1773664483.png)
接着我们写两行程序来找到其对应的名称:
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195401101-977138288.png)
接着按照plt.rcParams['font.sans-serif'] = 字体名称
的格式设置即可:
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195403424-501280606.png)
可以看到这时我们全局所有文字都变成华文琥珀。
- 使用任意的字体
如果你想要的字体不在系统默认字体中,且你只想临时使用不想安装到系统字体中,则可以利用font_manager.fontManager.addfont()
来传入字体文件路径临时注册一个字体,以我下载的三方字体文件MaShanZheng-Regular.ttf
为例:
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195405895-2073896788.png)
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195408437-1917769274.png)
2.2 在matplotlib中设置局部字体
而如果你只是想要在数据可视化作品中的部分元素譬如文字标注中临时使用一下字体,则可以利用font_manager.FontProperties()
将字体路径作为fname
参数传入,并传入到对应matplotlib
绘图API相应参数中,以text()
为例:
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195410525-1635943050.png)
而刻度标签则可以参考下面的方式:
![](https://img2020.cnblogs.com/blog/1344061/202012/1344061-20201211195412749-131315892.png)
以上就是本文的全部内容,欢迎在评论区与我进行讨论~