使用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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM