前言
遇到了一個挺頭疼的問題,就是關於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
- 效果