1. 程式人生 > >matplotlib畫圖時的中文設定

matplotlib畫圖時的中文設定

轉自:http://blog.sina.com.cn/s/blog_4facccc0010198jz.html

實際上,matplotlib是支援unicode編碼的,出現圖1的問題主要是沒有找到合適的中文字型,在matplotlib的配置檔案中,可以看到字型的預設設定如下:


#font.family  : sans-serif
#font.sans-serif  : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

並沒有中文字型,所以我們只要手動新增中文字型的名稱就可以了,不過並不是新增我們熟悉的“宋體”或“黑體”這類的名稱,而是要新增字型管理器識別出的字型名稱,matplotlib自身實現的字型管理器在檔案font_manager.py中,自動生成的可用字型資訊在儲存在檔案fontList.cache裡,可以搜尋這個檔案檢視對應字型的名稱,例如simhei.ttf對應的名稱為’SimHei’,simkai.ttf對應的名稱為’KaiTi_GB2312’等。因此我們只要把這些名稱新增到配置檔案中去就可以讓matplotlib顯示中文,修改的方法有兩種:


1. 直接修改配置檔案matplotlibrc
 在配置檔案中找到font.sans-serif的設定,然後新增需要的中文字型名稱,例如:

font.sans-serif  : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

2. 動態設定(推薦方式)
 在python指令碼中動態設定matplotlibrc,這樣不需要更改配置檔案,方便靈活,例如:

mpl.rcParams['font.sans-serif'] = ['SimHei']


修改後的程式碼如下:

#-*- coding: utf-8 -*-

from pylab import *

mpl.rcParams['font.sans-serif'] = ['SimHei']
t = arange(-4*pi, 4*pi, 0.01)
y = sin(t)/t
plt.plot(t, y)
plt.title(u'鐘形函式')
plt.xlabel(u'時間')
plt.ylabel(u'幅度')
plt.show()