解决jupyter notebook图形中的中文乱码问题

Pandas绘图依赖的Matplotlib库在安装初始化时会加载一个配置文件,这个文件包含了将要用到的字体,而中文字体不在这个文件中,所以会造成在绘图过程中图形中的中文显示为方框或乱码的情况。

那如何让Matplotlib正确显示中文呢?有临时和永久两种方案。

临时方案是在每次操作时添加如下代码:

import Matplotlib.pypolt as plt
plt.rcParams['figure.figsize']=(15.0,8.0)
plt.rcParams['font.family']=['sans-serif']
plt.rcParams['sans-serif']=['SimHei']
plt.rcParams['axes-unicode_minus']=False

SimHei是中文的常规黑体,如果显示其他类型的字体,直接换成其他Windows中安装的其他的字体名字即可。

永久方案的思路是在配置文件中增加指定的中文字体,步骤如下:

第一步,下载字体文件,建议下载SimHei字体,并安装。如果系统已安装,查找方式,C:\Windows\Fonts,找到相应的字体文件,比如把SimHei(黑体常规)文件复制到Python中字体配置文件的ttf文件夹里,找到Python中的配置文件,运行如下代码:

import matplotlib
matplotlib.matplotlib_fname()


'''
d:\\program files\\python\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc
'''

上面的位置matplotlibc的上一个文件可以找到fonts下的ttf,即

d:\\program files\\python\\lib\\site-packages\\matplotlib\\mpl-data\\fonts\\ttf

访问以上文件,在macOS系统中,在访达(Finder)菜单中的"前往"(Go)选项卡下找到'访问目录...'(Go To Folder...),打开并输入。

第三步,修改配置文件matplotlib.

在修改前备份一下这个文件以便于在修改错误时还原。用纯文本编辑器(notepad++、Sublime等,不能用记事本,更不能用Word)打开,使用查找功能查到font.family:sans-serif,font.serif:,font.sans-serif,去掉前面的注释符#,增加我们安装的字体名字(如simhei),我系统里全是小写的simhei,如果结果不对可能是字体名字不正确。最后找到axes-unicode_minus,去掉注释并将值设置为False.最终修改为:

font.family:  sans-serif
font.serif:      simhei, DejaVu Serif, Bitstream Vera Serif,
font.sans-serif: simhei, DejaVu Sans, Bitstream Vera Sans,
axes.unicode_minus: False 

保存并关闭配置文件。

第四部,找到缓存文件目录并删除。

Windows系统中的路径为C:\Users\Administrator\.matplotlib(将其中的"Administrator"换为你自己的电脑用户名),将tex.cache和fontList.json等文件全部删除。在macOS系统中可转到/Users/Administrator/.matplotlib。

第五步,重启jupyter notebook并重新执行检查代码,可以看见中文显示正确了。

检查代码如下:

pd.Series([1,2,3],index=['标签1','标签2','标签3']).plot()

补充:如果中文还是无法显示,检测一下字体名字是否正确,可以在第四步缓存文件fontlist-v330.json中找到正确的名字,查找SimHei代码下,发现"name":"simhei",回到配置文件把名字改为simhei。其他字体操作类似。

你可能感兴趣的:(jupyter,python,matplotlib)