天天看點

matplotlib、seaborn 展示中文字型

matplotlib、seaborn 展示中文字型

我們經常使用

matplotlib

seaborn

繪制各種圖示但是失望的是他們對中文字元不支援。

matplotlib、seaborn 展示中文字型

matplotlib 展示中文

查找系統上中文字型的安裝位置,我選用的是宋體,然後拷貝到可讀目錄下

~/fonts/Songti.ttc

mac: /System/Library/Fonts/Supplemental/Songti.ttc
window: C:\WINDOWS\Fonts\中文字型.ttf
linux: /usr/share/fonts
           

python 代碼:

import matplotlib.font_manager as fm,os
import matplotlib.pyplot as plt

# 添加字型
myfont = fm.FontProperties(fname=os.path.join(os.getenv('HOME'),'fonts/Songti.ttc'),size=10)
plt.xlabel('長度',fontproperties=myfont)
plt.ylabel('寬度',fontproperties=myfont)
           
matplotlib、seaborn 展示中文字型

seaborn 展示中文

方法一:提供字型檔案

  1. ~/fonts/Songti.ttc

    mac: /System/Library/Fonts/Supplemental/Songti.ttc
    window: C:\WINDOWS\Fonts\中文字型.ttf
    linux: /usr/share/fonts
               
  2. Python 代碼:
    import os
    import matplotlib.font_manager as fm
    import seaborn as sns
    import pandas as pd
    
    # 添加字型
    myfont = fm.FontProperties(fname=os.path.join(os.getenv('HOME'),'fonts/Songti.ttc'),size=10)
    sns.set(font=myfont.get_name())
    
    tips = pd.DataFrame({
        'time':["午餐","晚餐"],
        'total_bill':[1,2],
    })
    sns.pointplot(x="time", y="total_bill", data=tips)
               
    matplotlib、seaborn 展示中文字型

方法二:添加字型

  1. 檢視

    matplotlib

    預設字型
    from matplotlib.font_manager import findfont, FontProperties
    
     findfont(FontProperties(family=FontProperties().get_family()))
    # out: /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf
               
  2. 查找

    matplotlibrc

    的路徑
    import matplotlib
    
    matplotlib.matplotlib_fname()
    # out: /home/xxx/venv/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc 
               
  3. 修改

    matplotlibrc

    vim /home/xxx/venv/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc 
               
    取消注釋

    font.family

    font.sans-serif

    ,然後在

    font.sans-serif

    後追加你剛才的字元集名:
    # 擷取字元集名
    import matplotlib.font_manager as fm
    
    myfont = fm.FontProperties(fname=os.path.join(os.getenv('HOME'),'fonts/Songti.ttc'),size=10)
    myfont.get_name()
    
    # out: Songti SC
               
    修改:
    font.family: sans-serif 
    #font.style:   normal
    #font.variant: normal
    #font.weight:  normal
    #font.stretch: normal
    #font.size:    10.0
    
    #font.serif:      DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L,Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
    font.sans-serif: Songti SC, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
    #font.cursive:    Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive
    #font.fantasy:    Comic Neue, Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasy
    #font.monospace:  DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace
               
  4. 移除

    matplotlib

    緩存
    rm -rf ~/.matplotlib
               
  5. 拷貝你的字型檔案到

    matplotlib

    字型目錄下
    cp /System/Library/Fonts/Supplemental/Songti.ttc  /Users/Andrew/miniconda3/envs/technical-note/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
               
  6. 重新開機

    jupyter Notebook

    核心,然後就可以了。

方法三:直接替換預設字型

  1. matplotlib

    from matplotlib.font_manager import findfont, FontProperties
    
     findfont(FontProperties(family=FontProperties().get_family()))
    # out: /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf
               
  2. 備份字型
    cp /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf.bp
               
  3. 替換
    cp /System/Library/Fonts/Supplemental/Songti.ttc /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf
               
  4. jupyter Notebook

    核心,然後就可以了

如果是此文是轉載文章,本人會附上轉載連結,此篇文章的版權歸原創作者所屬,如果侵權請與我聯系,我會删除此文。

若沒有标明轉載連結,此篇文章屬于本人的原創文章,其版權所屬:

作者:feiquan

出處:http://www.cnblogs.com/feiquan/

版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

大家寫文都不容易,請尊重勞動成果~ 這裡謝謝大家啦(*/ω\*)

上一篇: TOML的由來