永久解决 matplotlib 图例中文方块错误

永久解决 matplotlib 图例中文方块错误

  • 问题
  • 查看当前环境的字体路径
  • 解决方法
  • 删除缓存


原文链接:https://learnku.com/articles/41886
这里对原文做了点修改,因为原文还是有点小问题的

问题

当打印图例的时候,图可以正常显示,但中文会显示方块。比如 title。然后会有个小报错:
报错描述:

/Users/username/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:
1331: UserWarning: findfont: Font family [‘SimHei’] not found. Falling
back to DejaVu Sans (prop.get_family(), self.defaultFamily[fontext]))

查看当前环境的字体路径

import matplotlib
print(matplotlib.matplotlib_fname())
/Users/username/anaconda3/lib/python3.6/site-packages/matplotlib

解决方法

首先下载一个字体文件 SimHei.ttf 提取码858y。
解压字体后拷贝到 matplotlib/mpl-data/fonts/ttf 目录下面。

mv ~/Downloads/SimHei.ttf ~/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf

修改配置文件 matplotlibrc:

vim ~/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

found 这三项配置并修改:

font.family: sans-serif

font.sans-serif: SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

axes.unicode_minus: False # 解决负号'-'显示为方块的问题

前两项大概在 194 行,第三项大概在 325 行。

但是改了配置之后并不会生效,需要重新加载字体,在 Python 中运行如下代码即可

删除缓存

print(matplotlib.get_cachedir())
rm -rf ~/.matplotlib

重启jupyter,现在再打印图例一点问题都没有了,支持中英文混搭。

原文地址:https://www.cnblogs.com/cndeveloper/p/14617086.html