(資料科學學習手札100)搞定matplotlib中的字型設定

費弗裡發表於2020-12-11

本文示例檔案已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  matplotlib作為資料視覺化的利器,被廣泛用於資料分析之中,但不太友好的是matplotlib中書寫非英文文字內容時,如果不事先對字型進行相關設定,會發現繪製出的諸如中文等均顯示為方塊亂碼,而今天的內容,我們就來小小總結一下matplotlib中字型設定的常用技巧。

(資料科學學習手札100)搞定matplotlib中的字型設定
圖1

2 在matplotlib中設定字型的常用方法

  在matplotlib中設定字型的方法按作用範圍可分為全域性設定與臨時設定:

2.1 在matplotlib中設定全域性字型

  我們在預設狀態下使用matplotlib書寫中文內容時之所以顯示出亂碼,是因為matplotlib預設的字型為英文字型,導致許多unicode編碼的語言文字都無法書寫。

  而全域性設定字型的方式,指的是我們可以通過修改本地配置檔案或在程式開頭設定字型相關引數,從而人為地為當前kernel下的matplotlib規定使用指定的字型,主要有以下幾種情況:

  • 使用系統自帶字型

  所謂系統自帶字型,譬如對於windows,其系統盤Windows/Fonts下的諸多已安裝到系統中的字型:

(資料科學學習手札100)搞定matplotlib中的字型設定
圖2

  當然,matplotlib可以檢測到的字型不止上述的這些,我們可以通過下列方式檢視matplotlib中預設已經識別到的所有可用字型:

import matplotlib.pyplot as plt
from matplotlib import font_manager

for font in font_manager.fontManager.ttflist:
    # 檢視字型名以及對應的字型檔名
    print(font.name, '-', font.fname)
(資料科學學習手札100)搞定matplotlib中的字型設定
圖3

  其中在font_manager.fontManager.ttflist中迭代到的每個物件,其name屬性即為我們下面設定字型要使用到的名稱,以華文琥珀為例,我們先檢視到其對應的字型檔名稱:

(資料科學學習手札100)搞定matplotlib中的字型設定
圖4

  接著我們寫兩行程式來找到其對應的名稱:

(資料科學學習手札100)搞定matplotlib中的字型設定
圖5

  接著按照plt.rcParams['font.sans-serif'] = 字型名稱的格式設定即可:

(資料科學學習手札100)搞定matplotlib中的字型設定
圖6

  可以看到這時我們全域性所有文字都變成華文琥珀

  • 使用任意的字型

  如果你想要的字型不在系統預設字型中,且你只想臨時使用不想安裝到系統字型中,則可以利用font_manager.fontManager.addfont()來傳入字型檔案路徑臨時註冊一個字型,以我下載的三方字型檔案MaShanZheng-Regular.ttf為例:

(資料科學學習手札100)搞定matplotlib中的字型設定
圖7
(資料科學學習手札100)搞定matplotlib中的字型設定
圖8

2.2 在matplotlib中設定區域性字型

  而如果你只是想要在資料視覺化作品中的部分元素譬如文字標註中臨時使用一下字型,則可以利用font_manager.FontProperties()將字型路徑作為fname引數傳入,並傳入到對應matplotlib繪圖API相應引數中,以text()為例:

(資料科學學習手札100)搞定matplotlib中的字型設定
圖9

  而刻度標籤則可以參考下面的方式:

(資料科學學習手札100)搞定matplotlib中的字型設定
圖10

  以上就是本文的全部內容,歡迎在評論區與我進行討論~

相關文章