使用matplotlib缺失中文字體的解決方案

出現問題

當我們用matplotlib作圖時中文亂碼,往往會發現中文的文字變成了小方塊。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] 

儘管我們指定了中文字體。這時可能會因爲系統中缺失中文字體而導致不能顯示。具體表現就是,運行過程中報warning:

lib/python3.7/site-packages/matplotlib/font_manager.py:1241: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.
  (prop.get_family(), self.defaultFamily[fontext]))

解決問題

1、首選安裝、拷貝對應字體到系統中。比如這裏我拷貝Windows系統中的黑體(simhei.ttf)到/usr/share/fonts/windows_fonts目錄。

mkdir /usr/share/fonts/windows_fonts
sudo mv ~/simhei.ttf /usr/share/fonts/windows_fonts

接下來將目錄中的字體註冊到系統中,讓系統能夠識別到這些新字體。

cd /usr/share/fonts/windows_fonts
mkfontscale
mkfontdir
fc-cache

此時再用下面的命令查看已經安裝好的字體:

fc-list  #列出系統識別到的已安裝字體。

我們可以看到這麼一條:

此時我們會發現matplotlib作出的圖中中文依舊無法正常顯示,這種情況只需刪除matplotlib的緩存目錄(~/.cache/matplotlib)即可解決。

rm -rf ~/.cache/matplotlib

至此中文就可以正常顯示了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章