相信我,这篇文章一定能让你的matplotlib完美显示中文!
大家好,我是早起。
在使用matplotlib进行可视化时,一个令人头疼的问题就是如何正确的显示中文,有时你百度后各种尝试,可能遇到中文还是显示一堆无效的框框,那么本文就将提供三种解决办法,希望能够帮助到大家。
首先我们需要知道,为什么中文不能被正确显示?比如你使用plt.title('可视化图鉴')
添加中文标题,matplotlib在输出文字时就去当前的字体文件中去查找这几个字,但是很遗憾没有找到。
所以本质上就是matplotlib的中文字体文件没有被正确设置。在下面给出的三个解决办法中,我不能确保一定能对你的电脑生效(毕竟有些时候因为环境导致的差异确实很麻烦),但是只要你清晰了解决思路(让matplotlib正确找到中文字体文件),一定能搞定!
一、麻烦但一定能解决的办法
首先给出的是一个99%概率能让你正确显示中文的方法,但不是一劳永逸的办法,所以略显麻烦。
上面我们说了,之所以不能输出中文,就是因为matplotlib找不到中文字体文件,怎么办?我们就强制指定一个中文字体文件,按住matplotlib的头,让他遇到中文就读取这个字体。
比如我们先下载一个想要的中文字体文件,比如微软雅黑吧,下载到本地并复制它的绝对路径,然后使用font_manager.FontProperties
读取这个字体,定义为WRYH
import matplotlib as mpl
WRYH = mpl.font_manager.FontProperties(fname = '/Users/liuhuanshuo/Desktop/可视化图鉴/font/WeiRuanYaHei-1.ttf') #微软雅黑字体
之后在需要输出中文的地方,添加fontproperties = WRYH
即可使用我们刚刚读取的中文字体,比如设置中文标题
plt.title('可视化图鉴',fontproperties = WRYH)
中文正确出来了有没有!理论上这个办法无视环境,不论Mac还是Win下,只要你的中文字体文件路径没有问题,一定能把中文显示出来。
但是正如标题所说的:麻烦,只要需要输出中文,你就要加上fontproperties = WRYH
这么一句话,如果要设置标题、图例、坐标轴、注释等多个中文的话,那么每制作一张图就需要复制粘贴很多次,工作量就上去了。
所以这个方法适用于紧急使用或者在非常用电脑下,没空折腾其他方法时使用。
二、可能是简单好用的办法
第二个办法是相对简单一点(不用安装任何字体,也不用修改路径),但是在有些电脑上可能会失效(小概率)。
其实matplotlib也内置了很多字体,我们可以使用下面的代码查看
import matplotlib as mpl
mpl.font_manager.FontManager().ttflist
我们可以看到原来内置了这么多字体文件,所以只需要找到其中的中文字体并指定就行了,当然从几百个字体名中找到中文字体是比较繁琐的
我自己测试下面三个都是OK的
'Songti SC''Wawati TC''STHeiti'
所以只需要使用plt.rcParams
指定字体就行,比如使用宋体'Songti SC'
plt.rcParams['font.sans-serif'] = ['Songti SC']
可以看到,中文也成功输出了。
为什么说这个办法不一定有效,因为不知道是由于版本原因还是电脑的原因,在有些电脑上我没法正常使用这个办法。
但这个方法值得一试,因为太简单了。所以你可以直接使用plt.rcParams['font.sans-serif'] = ['Songti SC']
之后看一下中文是否能正确输出,如果可以的话就说明有效,以后只需要在开头加上这么一句话就行。
至于plt.rcParams
是什么,我会在后续文章中单独进行讲解!
折腾但一劳永逸的办法
这是一个需要折腾一会,也是大多数教程推荐的方法,但是由于环境的问题,可能有些机器折腾很久才能成功。
回想上面第一种方法是强制指定matplotlib读取本地字体文件,第二种方法是尝试从默认字体文件中读取中文字体,那么将本地字体文件添加到默认字体中就是第三种办法!
这里我以mac系统下,在Jupyter Notebook
中设置为例进行讲解,Windows可以参考操作。
首先我们打开Jupyter Notebook
,执行下面的代码
import matplotlib print(matplotlib.matplotlib_fname())
这一步就是找到你的matplotlib配置文件所在位置,如果你同时安装了anaconda又单独装了个Python或者是你有多个版本matplotlib(可能你都不知道为什么),就会导致你用别人教程中的路径修改后会报错。
所以我们必须找到当前notebook,使用的matplotlib
配置文件在哪里
解析来进入打印出来的目录,我们需要关注的就是一个字体文件,下载你要的字体比如黑体(simhei.ttf),放入ttf文件夹中,之后找到matplotlibrc
文件,