0%

解決matplot中文亂碼問題

介紹

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

1
2
3
4
5
6
7
import matplotlib.pyplot as plt

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

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

注意在下方的中文字成為了方塊。

matplot

  • 原因在於matplotlib沒有原生支援中文字型

下載字型

我們這邊先下載一個開源的中文字型,這邊我們採用的是一個開源可商用的中文字型-台北黑體

  • 選擇下載TaipeiSansTCBeta-Regular這個ttf檔案

檢查 font 位置

1
2
import matplotlib
print(matplotlib.__file__)

在我的系統中,結果是在 /usr/lib/python3.8/site-packages/matplotlib/__init__.py

1
$ ls -l /usr/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf

可以看到系統中現有的 font 字型檔,所以我們要把下載的字型檔放上面的目錄中。

清除原來的 matplot 的 cache

1
$ rm -r ~/.matplolib

檢查載入的字型

1
2
3
4
import matplotlib.font_manager
a = sorted([f.name for f in matplot.font_manager.fontManager.ttflist])
for f in a:
print(f)

可以看到我下載的 ‘Taipei Sans TC Beta’ 出現了。

驗證字型

也要修改一下程式

1
2
3
4
5
6
7
8
9
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()

matplot

參考