相信我,这篇文章一定能让你的matplotlib正确显示中文。 您所在的位置:网站首页 loaderShell设置中文 相信我,这篇文章一定能让你的matplotlib正确显示中文。

相信我,这篇文章一定能让你的matplotlib正确显示中文。

2023-11-27 17:22| 来源: 网络整理| 查看: 265

大家好,我是早起。

在使用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 实验室设备网 版权所有