Windows+Python 解決 matplotlib 畫圖不支持中文(及負號)的問題

昨天折騰了這破問題一晚上,參照知乎上的問題下面的回答:matplotlib圖例中文亂碼?

以及還有一些博客,還是一直解決不了。今天終於弄好了,來分享下怎麼走的,方便以後需要的人可以少走點彎路,也為自己以後做個備份。

我的開發環境是 Windows10 + Anaconda3 + Pycharm。不過解決思想應該 linux,Mac也都差不多。

看到 @MichaelXoX 的答案,我這麼偷懶的人,當然選擇的是一勞永逸的解決方案啦!

我會基本操作,所以太長不看型:

首先把自己電腦上的windows支持中文的系統字體copy到malplotlib的字體中,再在matplotlibrc配置文件中設置一下支持,然後清除掉matplotlib以前的緩存,重啟Python即可大功告成!

步驟如下:

Step1:找到matplotlibrc配置文件和fonts所在位置。

在python的控制台輸入:matplotlib.matplotlib_fname(),從而得到matplotlib的配置文件所在位置,按此目錄索引打開該文件夾,可以看到fonts文件夾和matplotlibrc配置文件,進入到fonts文件夾里的ttf文件夾,放著不動,等待下一步操作。

圖1:從Python的控制台得到文件夾位置

圖2:打開該文件夾

Step2:Copy中文支持字體到matplotlib的ttf文件夾。

找到windows上支持中文的字體文件夾:C:WindowsFonts,找一個支持中文的,比方說微軟雅黑,黑體,楷體等等(我試過,此處其實無所謂ttc文件和ttf文件),將這個字體copy到Step1中的ttf文件夾中,我選的是微軟雅黑。

圖3:找到windows下支持中文的字體

Step3:找到剛剛那個字體的英文名稱。

直接點開後發現字體名稱是中文的「微軟雅黑」,不是英文沒關係,給你一個對應表格。(昨晚一直弄不對其實就是卡死在這一步。)發現英文名是「Microsoft YaHei」。

表格出處參考鏈接:CSS 中文字體的英文名稱 (simhei, simsun) 宋體 微軟雅黑

圖4:字體中英文對照

Step4:配置matplotlibrc文件。

進入Step1中的matplotlibrc配置文件,找到大概211行的#font.sans-serif ,去掉#號,並在後面加上剛剛copy過來的字體的英文名稱(注意不是文件的英文名稱,比方說幼圓字體的文件名稱是SIMYOU.ttf,但這並不是我們想要的,而是它的字體英文名稱YouYuan),修改後保存。

圖5:修改matplotlibrc配置文件,添加中文支持字體

Step5: 清除之前的緩存。(其實我也沒搞清楚到底需要不需要這一步,不過最好還是做這一步)

再Python控制台輸入:matplotlib.get_cachedir(),得到緩存所在的文件夾。進入文件夾,刪空裡面的文件。

圖6:得到緩存所在文件夾

圖7:刪空這些文件

Step6:開心地重啟Python即可。

圖8:圖上的中文真漂亮,且來之不易


(2018年1月18號更新)

Step7:修改配置matplotlibrc文件解決負號不顯示問題。

評論里 @舊信 提到了負號無法顯示的問題,我今天用到了負號,發現顯示的是一個方格,怎麼解決呢?很簡單,繼續一勞永逸的辦法,甚至不用重啟Python(至少我這邊是這樣的),修改配置文件matplotlibrc,大概在330行,去掉前面的注釋#號,將True改為False,保存修改好的文件,你的Python就可以顯示負號了。

圖9:修改配置文件解決負號顯示問題

聲明:轉載需聯繫本人。


推薦閱讀:

Flask模板引擎:Jinja2語法介紹
windows下anaconda 安裝報錯, errno9,怎麼解決?
【Python基礎】靜態方法和類方法
Python數據挖掘實踐—決策樹

TAG:Python | Matplotlib | 绘图 |