想要在 Ubuntu 18.04 底下用 python 的 matplotlib 畫圖, 第一個遇到的問題就是中文顯示。 這篇簡體中文教學文 onepiece_dn的专栏 寫得很清楚, 照做就成功了。 不過我想要改預設值, 不想每一句話都指定中文字型。 另一篇 ButteredCat 寫的簡中文章 解釋詳盡。 因為我用的字型是文鼎的 uaki.ttc 所以還需要再多加一步: 從 ttc 裡面把 ttf 挖出來。 以下是修改過的簡要步驟及程式碼; 詳細說明請參考上述連結。
- 除了安裝 python-matplotlib 套件之外, 如果你的程式是 python 2.7 而非 python3, 還需要手動安裝 python-pyqt5 套件。
- 查看系統裡已安裝哪些中文字型:
fc-list :lang=zh
例如我自己看到其中有興趣的這一列:/usr/share/fonts/truetype/arphic/ukai.ttc: AR PL UKai TW:style=Book
- 如果是 .ttf 檔, 可直接跳到最後一步。 如果是 .ttc 檔, 請先抓回 這個轉檔小程式, 並且安裝 python-fontforge 套件。
- 轉檔:
cd /usr/share/fonts/truetype/arphic ; python2 /some/where/split_ttc_font_to_ttf.py ukai.ttc
雖然有一些警告訊息, 還是成功地在 /usr/share/fonts/truetype/arphic 底下產生了四個 *.ttf 。 - 每次在系統內新增字型之後, 還必須清除 cache 才會生效:
rm -rf ~/.cache/matplotlib/*
- 現在執行這個程式, 應該就可以看到中文了。
#!/usr/bin/env python # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['AR PL UKai TW'] + mpl.rcParams['font.sans-serif'] mpl.rcParams.update({'font.size': 24}) plt.plot([2,0,1,3]) plt.xlabel(u'時間') plt.ylabel(u'力量') plt.savefig('test.svg') plt.show()
謝謝老師整理與分享方法,剛好遇到這個需求;這個方法我在 Ubuntu Xenial 上測試也沒問題,供大家參考!
回覆刪除