本文參考:http://www.itdecent.cn/p/15b5189f85a3 , 解決用matplotlib生成圖表的時候,無法正常顯示中文的問題
下面是版本信息:
- anaconda: Anaconda3-5.0.1-Windows-x86_64
- python: 3.6.3
- matplotlib:2.1.0
matplotlib 默認不支持中文的顯示,為了讓其支持中文,需要具備兩個條件:
- 系統(tǒng)中需要有中文字體文件,并且必須是ttf格式
- 告訴matplotlib去使用特定的字體,以支持顯示中文
本文以SimHei字體來說明具體的配置方法??赡躓indows 10系統(tǒng)中帶有這個字體(這里推薦一個Windows下好用的搜索工具:everything)。如果找不到這個字體,可以從 https://github.com/StellarCN/scp_zh/blob/master/fonts/SimHei.ttf 下載。
matplotlib 會從matplotlibrc文件里讀取配置文件。全局的配置文件存放在 \Anaconda3\Lib\site-packages\matplotlib\mpl-data\matplotlibrc 里,我們可以在用戶根目錄下創(chuàng)建一個matplotlibrc,該目錄下的matplotlibrc優(yōu)先級是高于全局的配置文件,因此我們可以在這里面定義使用的字體,具體步驟如下:
在用戶的根目錄,創(chuàng)建一個空白文件,命名為matplotlibrc
-
使用下面的命令,可以知道m(xù)atplotlib讀取的配置文件已經(jīng)發(fā)生變化(如果沒有步驟1,該命令會顯示全局的配置路徑)
import matplotlib matplotlib.matplotlib_fname() >>> C:\\Users\\xxxxxx\\.matplotlib\\matplotlibrc 將SimHei字體文件(simhei.ttf)復(fù)制到 \Anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttf 目錄下
-
用文本編輯器打開 C:\Users\xxxxxx.matplotlib\matplotlibrc,輸入下面的代碼(下面的代碼中,解決了中文顯示的問題和負號顯示的問題)。matplotlib的默認font.family是使用sans-serif (sans-serif是屬于一類字體),下面的代碼指定了matplotlib將使用哪些字體,默認先會去找SimHei字體,如果找不到,接著找這個列表里的后一個,以此類推
# 解決中文問題 font.sans-serif : SimHei, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif # 解決負號顯示問題 axes.unicode_minus : False 重啟Jupyter NoteBook,刪除C:\Users\xxxxxx.matplotlib\下的tex.cache和fontList.json,這種matplotlib即可顯示中文
經(jīng)過上面的步驟,如果依然無法顯示中文,可嘗試通過下面的代碼排查:
# 確保matplotlib讀取的配置文件,是用戶根目錄下的matplotlibrc
print(matplotlib.get_configdir())
>>> C:\Users\lin.zhongsheng\.matplotlib
# 確認一下,目前使用的font.family是
from matplotlib.font_manager import findfont, FontProperties
print(FontProperties().get_family())
>>> ['sans-serif']
# 確認一下,配置文件中font.sans-serif的值,與**步驟4**中定義的一致
print(matplotlib.rcParams['font.sans-serif'])
>>> ['SimHei', 'DejaVu Sans', 'Bitstream Vera Sans', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', 'sans-serif']
# 確??梢哉业絊imHei的字體文件
print(findfont(FontProperties(family=FontProperties().get_family())))
>>> C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\mpl-data\fonts\ttf\simhei.ttf
最后,我們還需要注意。即使配置好了,但在引入seaborn后,會再次出現(xiàn)亂碼,那么可以在引入seaborn后,添加下面的代碼解決
import seaborn as sns
sns.set_style({'font.sans-serif':['simhei','Arial']})