2016-04-27 99 views
0

下面的代碼產生與plt.show()正確的情節,但保存到PDF或PNG圖像時失敗。matplotlib顯示工作,而savefig失敗unicode

我在類似的問題中嘗試了各種建議(請參閱註釋行),但它們都不適用於這種情況。 Png文件將unicode字符顯示爲框,而pdf只是忽略它們。

##-*- coding: utf-8 -*- 
#from matplotlib import rc 
#rc('font', **font) 
#rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']}) 
#rc('font',**{'family':'serif','serif':['Palatino']}) 
#rc('text', usetex=True) 
import matplotlib.pyplot as plt 

plt.figure() 
plt.plot(range(10)) 
plt.xlabel(u"\u2736") 
plt.ylabel(u'\u03c4') 
plt.savefig('unicode.pdf') 
plt.savefig('unicode.png') 
#plt.show() 

回答

2

當您嘗試更改字體系列時,您幾乎已經在那裏。

只有某些字體支持unicode字符。您可以通過以下方式查看已安裝的字體:

import matplotlib.font_manager as fm 
set([f.name for f in fm.fontManager.ttflist]) 

然後更改爲unicode字體, Linux中的DejaVu Sans,Windows中的Arial Unicode MS,Mac OS X中的Lucida Grandemore on Wiki。無需使用tex:

plt.rcParams['font.family'] = 'DejaVu Sans' 
+0

感謝您的建議。 Mac上不存在'DejaVu Sans'。我試圖安裝它,但以某種方式失敗。但將字體更改爲Calibri適用於\ tau符號。正如你所說,這絕對是一個字體問題。也許你可以添加其他字體選項到你的答案和獲取字體信息的方式,例如'import matplotlib.font_manager as fm' 'fm.findSystemFonts(fontpaths = None,fontext ='ttf')'set([ f.font.fontManager.ttflist中f的名稱))' – Armut

+1

啊,對不起,我沒有檢查Mac。發現一些支持unicode的字體的資源,所以我會更新答案 – cnosam