背景
最近在学习 Python 著名的绘图包 matplotlib 时,运行 Python 脚本的时候会报错,大致报错信息如下:
Font family [‘sans-serif’] not found. Falling back to DejaVu Sans.
参考网上的一些解决办法后,自己也总结了一下,下面就详细讲讲。
解决步骤
-
首选,需要 simhei.ttf 文件
可以 戳这里 去获得 simhei.ttf 文件 -
将 simhei.ttf 拷贝到 matplotlib 安装路径下
如果不知道 matplotlib 的安装路径该怎么办呢?哈哈,没关系,我们可以通过 matplotlib.matplotlib_fname() 来获得 matplotlib 的安装路径。通过命令行进入 Python,运行如下代码:
import matplotlib print(matplotlib.matplotlib_fname()) # 将会获得 matplotlib 的安装路径
图例:
Ok,这样我们就得到了 matplotlib 的安装路径(/Users/eric/Library/Python/3.7/lib/python/site-packages/matplotlib),剩下的事情就是将 simhei.ttf 拷贝到 /Users/eric/Library/Python/3.7/lib/python/site-packages/matplotlib 了 -
删除 ~/.cache/matplotlib 的缓冲目录(注:如果没有就不必删除了)
-
修改 matplotlibrc 文件
在命令行执行 vim 编辑 matplotlibrc 文件
vim /Users/eric/Library/Python/3.7/lib/python/site-packages/matplotlib/mpl-data/matplotlibrc
要修改的地方有 3 处:
- font.family 设置为 font.sans-serif
- 添加 “SimHei” 即宋体到字库族(font.sans-serif)列表中
- 为解决负号(‘-’ )显示为方块的问题,将 axes.unicode_minus 的值改为 False
给出 2 张修改 matplotlibrc 文件的截图,如下:
-
网上有一些参考就只止步于【步骤4】,但是运行 Python 脚本的时候会报错。到底还差了什么呢?后来才知道,原来问题在于改了配置之后并不会自动生效,我们还需要重新加载字体。那么,如果重新加载字体呢?其实也很简单,通过命令行进入 Python,运行如下代码:
from matplotlib.font_manager import _rebuild _rebuild()
图例: 6. 让我们再重新运行一下那个出问题的 Python 脚本吧!哈哈哈,感谢上帝爸爸,终于成功了!!