作者:燕清,老齐
AI Studio是一个非常好用的数据科学在线实验平台,不论是教学、学习还是开发,都可以使用。但是,下面的缺憾未免成为了珍珠上的一点瑕疵。
1 | %matplotlib inline |
输出结果:

在绘制这个饼图的时候,我们在标题以及饼图不同区域的标签设置了中文,但是现实效果不能令人满意,没有显示相应的汉字。很多人遇到过这种问题,一种常见解决之道就是“绕着走”,将中文换成英文,乃至于在某些官方的案例中也是如此。
专业的开发者天生就是“以解决难题为荣”的,这个难题必须要破解。
如果在网上搜索Matplotlib显示汉字的问题,会有好多种方法,但是那些方法都是针对本地操作系统的,而非针对Ai Studio这样的远程系统——虽然也是Ubuntu操作系统,但是由于每个人使用的是一个虚拟环境,在权限、路径等方面与本地操作系统还是有所差别的。
查看已有字体
在开始解决问题之前,先对当前我们使用的虚拟操作系统以及它已有字体有所了解。
当前的操作系统
1
!cat /etc/*-release
输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"
NAME="Ubuntu"
VERSION="16.04.3 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.3 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial从上述结果,我们了解到,现在所使用的Ai Studio是Ubuntu操作系统。因此,各种Linux命令就可以放心使用了。
查看已有字体
首先看一看系统自带的字体。
1 | # Linux系统默认字体文件路径 |
输出:
1 | cmap truetype type1 X11 |
显然操作系统默认有一些字体,但这些字体中有多少是支持显示汉字的呢?还要继续查看:
1 | # 查看系统可用的ttf格式中文字体 |
没有任何查询结果,说明系统默认字体中没有支持汉字的ttf格式字体。
熟悉Matplotlib的朋友可能会想到,也应该看看Matplotlib库的字体目录,或者将支持汉字的字体放到该目录中。
Ai Studio虽然是Ubuntu操作系统,但又不完全等同于本地的Ubuntu系统,Python第三方库的安装位置与本地计算机中的位置不同。
1 | import matplotlib |
输出:
1 |
|
以上的输出结果:/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib
,就是matplotlib的存储路径,或者说,所有第三方包都会被安装到/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/
里面。
那么,Matplotlib保存字体的路径就应该是/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf
,可以查看其中的字体:
1 | # matplotlib字体路径(aistudio) |
输出:
1 | cmb10.ttf DejaVuSerif.ttf |
查看上面的显示结果,会发现,的确没有支持汉字显示的字体,所以,前面可视化结果中不能显示汉字是很正常的。
按照在本地计算机上设置汉字显示的思维方法,将支持汉字显示的字体放到上述目录中,并修改相应的配置文件matplotlibrc,是否可以?如果读者有兴趣,可以尝试。这里只说明结果:无法解决本文的问题。
下载字体
既然系统默认没有支持汉字的字体,就不得不下载了。注意,不是下载到你所使用的本地计算机,而是下载到当前Ai Studio给我们提供的虚拟操作系统上。
1 | # 下载中文字体 |
输出:
1 | --2020-04-10 15:44:35-- https://mydueros.cdn.bcebos.com/font/simhei.ttf |
字体下载之后,会保存到当前项目的永久文件夹中。点击界面左侧的“文件夹”,可以看到刚刚下载的字体文件simhei.ttf,再用下面的方式得到这个字体的名称。
1 | # 查看字体的引用名 |
输出:
1 | SimHei |
从上述返回结果可知,下载的字体文件simhei.ttf,在Matplotlib中,所引用的字体名称是SimHei。
第一种方法
这是一种非常灵活的方法,可以根据需要对所绘制图像设置不同的字体。
1 | %matplotlib inline |
输出:

在plt.pie和plt.title中,都是用了参数’fontproperties’,这个参数是matplotlib的文本参数之一(查看:Text properties and layout:https://matplotlib.org/3.1.1/tutorials/text/text_props.html ),其值是FontProperties类的实例,即前面所创建的字体对象。
如此解决了当前图示中汉字显示问题。
第二种方法
第一种方法定制性比较强,在一个项目中,可以给不同图示配置不同的字体。如果不需要如此,也可以用这里介绍的第二种方法,一个项目中所有可视化的图示都用同一种汉字字体。
在创建共本项目应用的字体目录fonts,并把所下载的字体放到该目录中。
1 | #创建字体目录fonts |
上面的操作完成之后,一定要执行下面的操作:
重启环境,即用鼠标点击本项目浏览器中的下图所示图标:

1 | %matplotlib inline |
输出:

完整代码
- 本文作者: 燕清
- 本文链接: http://eshop88.cn/2020/04/11/paddle/如何在AIStudio数据可视化图像中显示汉字/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!