0%

解决mac matplotlib中文乱码问题

我们通过 matplotlib 画图时,比如:

1
2
3
4
5
6
7
8
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('中文标题')

中文会出现乱码。如图:

同时,伴随着如下错误信息:

1
2
3
4
/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 39064 missing from current font.
font.set_text(s, 0.0, flags=flags)
/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 20013 missing from current font.
font.set_text(s, 0, flags=flags)

临时解决办法,可以执行如下两条语句:

第一句是设置字体,设置了字体后,负号会变成乱码。
第二句是让负号的乱码正常显示。

1
2
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

查看配置文件位置

1
2
3
import matplotlib
matplotlib.matplotlib_fname()
'/opt/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc'

编辑修改文件 /opt/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc 内容。

删除注释 #
font.family : sans-serif

删除注释 #,并加入 SimHei

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

删除注释 #,True 改为 False

axes.unicode_minus : False

清除缓存

1
$ rm -rf ~/.matplotlib

刷新 Jupyter Notebook 的页面,发现设置已经生效了。