永久解决 matplotlib 图例中文方块错误
问题
当打印图例的时候,图可以正常显示,但中文会显示方块。比如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/font_manager.py
这个文件,我是 Mac,Windows 的 matplotlib
路径根据错误提示也能找到。
解决方法
首先下载一个字体文件 SimHei.ttf。
解压字体后拷贝到 matplotlib/mpl-data/fonts
目录下面。
$ mv ~/Downloads/SimHei.ttf ~/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/
修改配置文件 matplotlibrc
:
$ subl ~/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
subl 是我之前配置的 sublime 的快捷命令。
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 中运行如下代码即可:
from matplotlib.font_manager import _rebuild
_rebuild() # reload一下
现在再打印图例一点问题都没有了,支持中英文混搭。
再次碰到问题,这次试一下删除字体缓存路径,重启编辑器。
字体缓存路径
import matplotlib
print(matplotlib.get_cachedir())
删除缓存
$ rm -rf ~/.matplotlib
本作品采用《CC 协议》,转载必须注明作者和本文链接