最近手頭有公司的數據資源,正好拿來練習了 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一下