2018年8月3日 星期五

matplotlib 畫圖時採用 ttc 中文字型

想要在 Ubuntu 18.04 底下用 python 的 matplotlib 畫圖, 第一個遇到的問題就是中文顯示。 這篇簡體中文教學文 onepiece_dn的专栏 寫得很清楚, 照做就成功了。 不過我想要改預設值, 不想每一句話都指定中文字型。 另一篇 ButteredCat 寫的簡中文章 解釋詳盡。 因為我用的字型是文鼎的 uaki.ttc 所以還需要再多加一步: 從 ttc 裡面把 ttf 挖出來。 以下是修改過的簡要步驟及程式碼; 詳細說明請參考上述連結。

  1. 除了安裝 python-matplotlib 套件之外, 如果你的程式是 python 2.7 而非 python3, 還需要手動安裝 python-pyqt5 套件。
  2. 查看系統裡已安裝哪些中文字型: fc-list :lang=zh 例如我自己看到其中有興趣的這一列: /usr/share/fonts/truetype/arphic/ukai.ttc: AR PL UKai TW:style=Book
  3. 如果是 .ttf 檔, 可直接跳到最後一步。 如果是 .ttc 檔, 請先抓回 這個轉檔小程式, 並且安裝 python-fontforge 套件。
  4. 轉檔: cd /usr/share/fonts/truetype/arphic ; python2 /some/where/split_ttc_font_to_ttf.py ukai.ttc 雖然有一些警告訊息, 還是成功地在 /usr/share/fonts/truetype/arphic 底下產生了四個 *.ttf 。
  5. 每次在系統內新增字型之後, 還必須清除 cache 才會生效rm -rf ~/.cache/matplotlib/*
  6. 現在執行這個程式, 應該就可以看到中文了。
#!/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()

1 則留言:

  1. 謝謝老師整理與分享方法,剛好遇到這個需求;這個方法我在 Ubuntu Xenial 上測試也沒問題,供大家參考!

    回覆刪除

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。