Python:matplotlib 中文亂碼的解決方案


最近手頭有公司的數據資源,正好拿來練習了 matplotlib 的畫圖,期間碰到一個坑,就是中文在圖表中顯示的是方框。在查詢網上各種資料並實踐后,我分享一下我試驗成功的解決方案。

本文針對 Mac 系統,其他系統也可參考本文。

原因

出現中文亂碼是因為 matplotlib 庫中沒有中文字體,所以顯示出來的不像是真正的亂碼,而是都為方框。

解決方法

1)在終端中根據個人需求啟動 python 或 python3,或者直接打開相應的 Python Launcher,執行以下兩句。

import matplotlib
matplotlib.matplotlib_fname()

得到的結果就是 matplotlib 包所在的文件夾位置,我得到的路徑是 '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc',截圖如下。(mac 以外的系統得到的路徑差別會很大)

2)進入上一步得到的路徑,打開 matplotlibrc 配置文件,找到以 #font.sans-serif 開頭的那一行,去掉#,並添加 SimHei 在該參數中(如下圖)。字體也可以改成別的。網上有些文章中是把 SimHei 放在參數最后,我開始也是放在最后的,沒有解決問題,放到最前面就解決了問題。

3)在網上下載需要添加的字體的 ttf 文件,SimHei 的下載地址:https://www.fontpalace.com/font-details/SimHei/。下載后將文件放置在 matplotlib 包文件夾下的 /fonts/ttf 中(也就是前面matplotlibrc 配置文件所在的文件夾的 /fonts/ttf 中)。

完成這些后應該就能解決問題了。

mac 之外的系統做到這兒時可能還不能解決問題,我看到有一個帖子提到的方法或許可以解決問題(https://www.zhihu.com/question/25404709/answer/309784195 ),順便分享一下。

改了配置之后並不會生效,需要重新加載字體,在Python中運行如下代碼即可:

from matplotlib.font_manager import _rebuild

_rebuild() #reload一下

 

參考資料

https://segmentfault.com/a/1190000005144275


免責聲明!

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



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