永久解决matplotlib中文乱码

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

大家好,我是老表,今天给大家分享一个永久解决matplotlib中文乱码的笔记,希望对大家有所帮助。

首先需要你的电脑安装好了Python环境,并且安装好了Python开发工具。

如果你还没有安装,可以参考以下文章:

如果仅用Python来处理数据、爬虫、数据分析或者自动化脚本、机器学习等,建议使用Python基础环境+jupyter即可,安装使用参考Windows/Mac 安装、使用Python环境+jupyter notebook

如果想利用Python进行web项目开发等,建议使用Python基础环境+Pycharm,安装使用参考 :Windows下安装、使用Pycharm教程,这下全了Mac下玩转Python-安装&使用Python/PyCharm

先下载下黑体中文字体库,这里我已经下载好了,大家在微信公众号简说Python回复:字体,即可获取下载地址。

  • 查看matplotlib安装目录
import matplotlib
# 查了安装路径
print(matplotlib.get_data_path()) 

'''
/Users/hhh/Library/Python/3.7/lib/python/site-packages/matplotlib/mpl-data
'''
复制代码
  • 将下载好的字体复制到mpl-data/fonts/ttf目录下

  • 修改matplotlib设置文件,在mpl-data/matplotlibrc,利用文本模式打开即可,修改三个地方,修改好后保存即可:
# 第一个地方:font.family: sans-serif这一句前面的#去掉
font.family:  sans-serif  
# 第二个地方:在:(冒号)后加一个SimHei
font.sans-serif: SimHei, DejaVu Sans, Bitstream ...
# 第三个地方:axes.unicode_minus后的值改为False
axes.unicode_minus: False
复制代码
  • 我们需要重新加载字体配置

如果你的matplotlib是3+以下,可以使用以下代码实现该步操作:

from matplotlib.font_manager import _rebuild
_rebuild()
复制代码

如果你的matplotlib是3+及以上,在这些版本中私有方法_rebuild已被弃用,所以没法使用上面方法进行重新加载,不过更简单的,你只需要重新启动下你的python环境就可以了。

以jupyter为例子,点一下图中按钮重启内核,再运行代码即可显示中文。

要是还是不行,查看下matplotlib缓存存放位置,然后删除,再重启jupyter notebook试试。

# matplotlib缓存的目录 
import matplotlib 
print(matplotlib.get_cachedir())
'''
/Users/hhh/.matplotlib
'''
复制代码

这个小绘图示例也给到大家方便检测。

# 随便绘制一个饼图
import matplotlib.pyplot as plt

fig1 = plt.figure()  # 先创建一个图像对象
plt.pie([0.5, 0.3, 0.2],  # 值
        labels=['我', '你', '它'],  # 标签
        explode=(0, 0.2, 0),  # (爆裂)距离
        autopct='%1.1f%%',   # 显示百分数格式
        shadow=True)  # 是否显示阴影
plt.show() 
复制代码