Python教學-如何解決matplotlib中文亂碼問題

當我們用matplotlib畫圖時會發現一個問題,那就是當我們想要在圖中顯示中文時會變成亂碼,像是下面的例子

import matplotlib.pyplot as plt

sales = [100,80,50]
x_labels = ['A品牌','B品牌','C品牌']

plt.bar(x_labels,sales)
plt.show()

會發生這種情況的原因在於matplotlib沒有原生支援中文字型,因此我們要手動幫matplotlib安裝中文字型

步驟一:下載中文字型

我們這邊先下載一個開源的中文字型,這邊我們採用的是一個開源可商用的中文字型-台北黑體,當然,讀者也可以使用自己想使用的中文字型

這時候,我選擇下載TaipeiSansTCBeta-Regular這個ttf檔案,下一步就是把它放到matplotlib讀取字型的資料夾裡面

步驟二:放入matplotlib內

要知道現在在使用matplotlib所在的資料夾可以在python環境下運行__file__指令,範例如下

import matplotlib
print(matplotlib.__file__)

這邊會顯示到matplotlib/__init__.py檔案的路徑,我們需要到matplotlib資料夾下面,然後找到mpl-data\fonts\ttf這條路徑,並在ttf資料夾丟入我們下載好的字體

步驟三: 到\.matplotlib 刪除所有快取檔案

matplotlib會在第一次import時建立字型列表,所以我們要到 C:\Users\你電腦的名字\.matplotlib 去刪除快取檔案(fontList.json)並重新import matplotlib

步驟四: 檢查字型是否成功安裝

可用以下指令來查看目前的字型

import matplotlib.font_manager

a = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

for i in a:
    print(i)

這時候我們看到Taipei Sans TC Beta被成功安裝了

使用說明:畫圖前指定字型

要使用中文字型,我們要加入一行指令來告訴matplotlib設定中文字型,指令如下

plt.rcParams['font.sans-serif'] = ['Taipei Sans TC Beta']

後面填入的字型為剛剛查找字型所顯示的名子,這時候並可以成功顯示中文字體,

程式碼如下:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Taipei Sans TC Beta']

sales = [100,80,50]
x_labels = ['A品牌','B品牌','C品牌']

plt.bar(x_labels,sales)
plt.show()
Share

3 thoughts on “Python教學-如何解決matplotlib中文亂碼問題

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *