“你的问题,我来帮”
本文转自数据分析师(Python)优秀学员 Mr.喵的知乎文章
摘要:Matplotlib中文乱码解决方案
关键词:Python 中文乱码 matplotlib 解决方案
Matplotlib是Python的一个2D绘图库,许多小伙伴第一次使用图表绘制时,会发现中文乱码或者小方框的情况。
原因是Matplotlib默认字体并不包含中文,所以必须设置为中文字体。
准备工作:
- 系统:Windows
- 环境管理器:Anaconda
- IDE:Jupyter notebook
- 编写如下代码,获取matplotlib包所在的配置文件的路径
import matplotlib
matplotlib.matplotlib_fname() #输出matplotlib包所在的配置文件的路径
D:\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
2.根据上面的路径打开文件夹(根据自己实际的输出路径去操作):
D:\Anaconda3\lib\site-packages\matplotlib\mpl-data\fonts\ttf
3.加入中文字体:
- 打开文件后可以看到满屏的字体文件,但没有一个是支持中文的
- 这时我们需要在网上下载一个中文字体,小伙伴们下载自己喜欢的字体,这里以SimHei为例
- 把中文字体文件放到文件夹里
- 到此,准备工作结束。解决方案有以下两种:
一、简单粗暴型
每次绘制图表前输入以下代码:
import matplotlib.pyplot as pltimport seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei'] # Matplotlib中设置字体-黑体,解决Matplotlib中文乱码问题
plt.rcParams['axes.unicode_minus'] = False # 解决Matplotlib坐标轴负号'-'显示为方块的问题
sns.set(font='SimHei') # Seaborn中设置字体-黑体,解决Seaborn中文乱码问题
值得注意的是,输入的字体名称必须和上面准备工作中加入的字体文件名称一致。
二、一劳永逸型
- 根据上面准备工作获取matplotlib包所在的配置文件的路径,打开matplotlibrc文件(以记事本方式或其他编辑器方式打开)。
D:\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
2.找到 #font.sans-serif,去掉前面的#,并在:后面写上在准备工作加入的中文字体的名 称SimHei。
3.找到#axes.unicode_minus,去掉前面的#,并在:改为False:
修改完毕后记得保存关闭。
C:\Users\Alice\.matplotlib
打开该路径下的文件夹,删除tex.cache文件和fontList.json文件。
然后重新启动Jupyter notebook,等待奇迹的发生。小伙伴们可以根据自己的情况,选择一种解决方案。