設(shè)置matplotlib顯示中文

本文參考:http://www.itdecent.cn/p/15b5189f85a3 , 解決用matplotlib生成圖表的時候,無法正常顯示中文的問題

下面是版本信息:

  • anaconda: Anaconda3-5.0.1-Windows-x86_64
  • python: 3.6.3
  • matplotlib:2.1.0

matplotlib 默認不支持中文的顯示,為了讓其支持中文,需要具備兩個條件:

  1. 系統(tǒng)中需要有中文字體文件,并且必須是ttf格式
  2. 告訴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)先級是高于全局的配置文件,因此我們可以在這里面定義使用的字體,具體步驟如下:

  1. 在用戶的根目錄,創(chuàng)建一個空白文件,命名為matplotlibrc

  2. 使用下面的命令,可以知道m(xù)atplotlib讀取的配置文件已經(jīng)發(fā)生變化(如果沒有步驟1,該命令會顯示全局的配置路徑)

    
    import matplotlib
    matplotlib.matplotlib_fname()
    
    >>> C:\\Users\\xxxxxx\\.matplotlib\\matplotlibrc
    
    
  3. 將SimHei字體文件(simhei.ttf)復(fù)制到 \Anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttf 目錄下

  4. 用文本編輯器打開 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
    
  5. 重啟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']})

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用 matplotlib 繪制圖表,默認設(shè)置下,是無法在圖中正確顯示中文的。原因無非兩種,一種是字符編碼不正確,一...
    ButteredCat閱讀 22,181評論 6 16
  • 最近想學(xué)習(xí)一些python數(shù)據(jù)分析的內(nèi)容,就弄了個爬蟲爬取了一些數(shù)據(jù),并打算用Anaconda一套的工具(pand...
    懵琪琪7閱讀 15,818評論 1 7
  • 遠望太陽西下的天空 我愿讓自己站立成一棵胡楊 與天山冰雪的消融 一起點綴成綠洲的期盼 既然遠望 就讓眼睛裝下所有的...
    遙遠的星光閱讀 641評論 0 7
  • 1、入口:原三個分類別搜索的入口設(shè)計風(fēng)格不顯見,用戶更多會直接在輸入框執(zhí)行搜索,現(xiàn)用清晰的“綠色+純文字”,有意引...
    edwj閱讀 255評論 0 0
  • 文章目的 用腳本程序讀取網(wǎng)絡(luò)接口的吞吐量并用統(tǒng)計圖形表示出于項目需要,要將linux系統(tǒng)中各個網(wǎng)絡(luò)接口的吞吐量實時...
    westolife閱讀 322評論 0 0

友情鏈接更多精彩內(nèi)容