如何在Win 10解決matplotlib中文顯示的問題?

matplotlib中文

從別人的經驗中學習,讓你少走更多冤枉路。

許多人經常在第一次使用python的matplotlib來繪圖時,會遇上中文無法顯示的問題,google之後大部分都會找到這個解答 plt.rcParams['font.sans-serif'] = ['simhei'] ,但只要你matplotlib中的字體資料夾中沒有simhei字體,則這招就會失效。這篇文章主要分享如何自行新增字體來解決matplotlib在python中顯示中文的方法。

 


一、找到中文的字體檔(ttf/otf)

目前只有測試ttfotf字型檔的副檔名,都可以正常使用,其他的沒有測試。這次我們來使用目前比較夯的字體,由Google與Adobe一同推出的思源黑體(Noto Sans CJK TC)
思源宋體(Noto Serif CJK TC)。可以到Google Noto Fonts來下載,搜尋”Traditional Chinese”就可以找到,如下圖。

matplotlib中文

 


二、將字體放到matplotlib的字體套件資料夾

import matplotlib
print(matplotlib.__file__)

可以先載入套件,並使用__file__來找出安裝的位置在哪。接著打開剛剛下載的字體壓縮檔,你會發現許多個字體檔,只要選擇一個順眼的字體丟到matplotlib\mpl-data\fonts\ttf即可。

 


三、到\.matplotlib 刪除所有快取檔案

matplotlib套件會在你第一次import時,將所有的快取設定存取在\.matplotlib資料夾中(通常位置在C:\Users\你電腦的名字\.matplotlib),裡面包含了可以使用字體的fontList.json檔案,需要將其刪除,並重新import matplotlib,才會重新搜尋到剛剛放進去的字體。

 


四、重新import matplotlib,並查看fontList.json檔案

打開fontList.json,確認剛剛放進去的字體有沒有被記錄了,接著找出這個字體在JSON裡記錄的名稱。先確認NotoSansCJKtc-Black.otf已經被記錄了,再往下搜尋找到”name”: “Noto Sans CJK TC”。(這邊是使用Notepad++來直接開啟JSON檔案)

 


五、 Python 實戰

# 修復負號顯示問題
plt.rcParams['axes.unicode_minus'] = False

有些字體會無法正常顯示負號,此時需要加上以上的代碼。思源黑體可以正常顯示負號,所以不需要加上這個代碼。

 


六、 後記

因為只有在WIN 10上試過,所以這個方法不知道能不能適用其他系統,大家再試試看吧!

Facebook Comments