相信我,这篇文章一定能让你的matplotlib正确显示中文。 | 您所在的位置:网站首页 › loaderShell设置中文 › 相信我,这篇文章一定能让你的matplotlib正确显示中文。 |
大家好,我是早起。 在使用matplotlib进行可视化时,一个令人头疼的问题就是如何正确的显示中文,有时你百度后各种尝试,可能遇到中文还是显示一堆无效的框框,那么本文就将提供三种解决办法,希望能够帮助到大家。 首先我们需要知道,为什么中文不能被正确显示? 比如你使用plt.title('可视化图鉴')添加中文标题,matplotlib在输出文字时就去当前的字体文件中去查找这几个字,但是很遗憾没有找到。 所以本质上就是matplotlib的中文字体文件没有被正确设置。在下面给出的三个解决办法中,我不能确保一定能对你的电脑生效(毕竟有些时候因为环境导致的差异确实很麻烦),但是只要你清晰了解决思路(让matplotlib正确找到中文字体文件),一定能搞定! 一、麻烦但一定能解决的办法首先给出的是一个99%概率能让你正确显示中文的方法,但不是一劳永逸的办法,所以略显麻烦。 上面我们说了,之所以不能输出中文,就是因为matplotlib找不到中文字体文件,怎么办?我们就强制指定一个中文字体文件,按住matplotlib的头,让他遇到中文就读取这个字体。 比如我们先下载一个想要的中文字体文件,比如微软雅黑吧,下载到本地并复制它的绝对路径,然后使用font_manager.FontProperties读取这个字体 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文件, “simhei.ttf可以自行百度下载,也可以在可视化图鉴找到使用任意一款代码编辑器打开,找到以下部分并修改 font.family : sans-serif font.sans-serif: SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif其实就是取消font.family的注释,并在font.sans-serif中添加SimHei。 一定要把SimHei放在第一个,这样默认字体就是黑体,打开matploltib就能直接用,不用再指定了!最后保存退出重新启动Notebook 先执行下面代码重新加载matplotlib配置 from matplotlib.font_manager import _rebuild _rebuild()之后直接进行绘图,理论上不需要任何额外设置,就能正确显示中文了 如果你按照上面的指示执行到了这一步,依旧没有正确显示中文,那就属于疑难杂症型了。要是还想一劳永逸的解决字体问题,只要知道本质即使matplotlib无法找到你的中文字体文件,然后多搜搜别人的教程,并思考自己问题出现在哪里并尝试去解决,一定可以搞定! 以上就是matplotlib设置中文输出的常用办法,有任何问题可以给我留言,如果你有更好的办法,可以在评论区说一下,谢谢! 最后如果大家对数据可视化感兴趣,可以关注我的公众号「可视化图鉴」查看更多精彩文章! |
CopyRight 2018-2019 实验室设备网 版权所有 |