前言
遇到了一个挺头疼的问题,就是关于matplotlib绘制出来的图怎么显示中文。默认情况下,比如下面这句
plt.title('2019-nCoV疫情曲线', fontsize=20)
显示出来的标题带有方框,识别不出中文(如图)。找了挺久,试了几种方法,现在终于可以了。
环境
- ubuntu16.04
- pycharm
- python3
- matplotlib
过程
很多文章都说要加上下面这句,加了之后一般没效果。原因在于里面的字体库没有所提到的SimHei字体。
#解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
解决方法自然是先要找出matplotlib的字体放在哪,然后去下相应的字体,再把字体放进去。以下操作是在pycharm 中进行的。
- 进到python console(pycharm 底下有,不然找个终端输入python进入),输入以下代码即可查看字体路径,比如我的是
/home/xxx/PycharmProjects/Wuhan/venv/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc
import matplotlib
print(matplotlib.matplotlib_fname())
-
之后去下载SimHei字体
字体链接 -
下载完成之后将其放到/home/xxx/PycharmProjects/Wuhan/venv/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf下面
这个时候可以做个测试,发现依然是显示不了汉字。
- 之后在home目录下,执行 ctrl + h ,打开隐藏目录, 删除 ~/.cache/matplotlib的缓冲目录
sudo rm -r ~/.cache/matplotlib
- 接下来要修改matplotlibrc文件,文件位置如图
双击打开文件,ctrl+f 搜索相应的关键字快速定位。需要修改的部分如下(注意保存):
图中代码:
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,将True改为False,作用就是解决负号'-'显示为方块的问题
改完之后也就不需要.py文件里的这两行代码了,可以注释掉或者删掉
# plt.rcParams['font.sans-serif']=['SimHei']
# plt.rcParams['axes.unicode_minus'] = False
- 效果