相信我,这篇文章一定能让你的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文件,

(0)

相关推荐