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)
seaborn 展示中文
方法一:提供字型檔案
-
~/fonts/Songti.ttc
mac: /System/Library/Fonts/Supplemental/Songti.ttc window: C:\WINDOWS\Fonts\中文字型.ttf linux: /usr/share/fonts
- 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 展示中文字型
方法二:添加字型
- 檢視
預設字型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
- 查找
的路徑matplotlibrc
import matplotlib matplotlib.matplotlib_fname() # out: /home/xxx/venv/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
- 修改
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
- 移除
緩存matplotlib
rm -rf ~/.matplotlib
- 拷貝你的字型檔案到
字型目錄下matplotlib
cp /System/Library/Fonts/Supplemental/Songti.ttc /Users/Andrew/miniconda3/envs/technical-note/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
- 重新開機
核心,然後就可以了。jupyter Notebook
方法三:直接替換預設字型
-
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
- 備份字型
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
- 替換
cp /System/Library/Fonts/Supplemental/Songti.ttc /home/xxx/venv/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf
-
核心,然後就可以了jupyter Notebook
如果是此文是轉載文章,本人會附上轉載連結,此篇文章的版權歸原創作者所屬,如果侵權請與我聯系,我會删除此文。
若沒有标明轉載連結,此篇文章屬于本人的原創文章,其版權所屬:
作者:feiquan
出處:http://www.cnblogs.com/feiquan/
版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
大家寫文都不容易,請尊重勞動成果~ 這裡謝謝大家啦(*/ω\*)