2016-04-27 22 views
0

次のコードは、plt.show()で正しいプロットを生成しますが、pdfまたはpngイメージに保存すると失敗します。matplotlib show unicodeのためにsavefigが失敗します

私は、同様の質問でさまざまな提案(コメント行参照)を試みましたが、どれもこのケースでは機能しません。 PNGファイルはユニコード文字をボックスとして表示し、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]) 

次に、ユニコードフォントに変更します。 Linuxの場合はDejaVu Sans、Windowsの場合はArial Unicode MS、Mac OS Xの場合はLucida Grandemore on Wikiです。 texを使用する必要はありません:

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

お礼をありがとうございます。 「DejaVu Sans」はMacには存在しません。私はそれをインストールしようとしましたが、何とか失敗しました。しかし、フォントをCalibriに変更すると、\ tauシンボルが機能しました。あなたが言ったように、それは間違いなくフォントの問題です。おそらくあなたはあなたの答えに他のフォントオプションを加えたり、フォントに関する情報を得るための方法を追加することができます。例えば 'import matplotlib.font_manager as fm' ' fm.findSystemFonts(fontpaths = None、fontext = 'ttf') ' ' set([ fm.fontManager.ttflistのfのf.name)) ' – Armut

+1

ああ、申し訳ありませんが、私はMacでチェックしませんでした。ユニコードをサポートするフォントに関するリソースが見つかりましたので、私は答えを更新します – cnosam

関連する問題