最近想用matplotlib显示中文,搜了一大堆,发现还没搞懂,最后参考知乎上 彻底解决Python里matplotlib不显示中文的问题的解决方式,终于解决了。
第一步
先看自己有没有中文字体包,就是那个ttf
# 查询当前系统所有字体
from matplotlib.font_manager import FontManager
import subprocess
mpl_fonts = set(f.name for f in FontManager().ttflist)
print('all font list get from matplotlib.font_manager:')
for f in sorted(mpl_fonts):
print('\t' + f)
第二步
如果没有中文的,就去下载ttf,比如SimHei.ttf,然后复制到matplotlib包里面
import matplotlib
print(matplotlib.matplotlib_fname())
# **/anaconda3/envs/condaenv/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
但是其实这是个文件,需要编辑的,我们需要上一层,然后进入的是下面这个文件夹
**/anaconda3/envs/condaenv/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/
在这个文件夹里面,你可以看到很多ttf字体文件,我们把SimHei.ttf放进去
第三步
清除一下缓存,不清除的话就没反应
import matplotlib
matplotlib.get_cachedir()
# '/**/.cache/matplotlib'
删除这个文件夹
rm -rf /**/.cache/matplotlib
第四步
测试:
然后就可以测试了
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
# matplotlib.rc("font",family='SimHei')
x = np.arange(1, 12)
y = x ** 2 + 4
plt.title("Matplotlib demo")
plt.xlabel("时间(分钟)")
plt.ylabel("金额($)")
plt.plot(x,y)
plt.show()