20

matplotlibベクトル グラフィックス形式で保存して LaTeX ドキュメントで使用したいプロットがあります。

私は通常 から保存しmatplotlib、Inkscape で開き、PDF+LaTeX として保存します (PDF のテキストを省略して LaTeX ファイルを作成します)。これは、次の方法でも実現できます。

inkscape  -D -z --file=in.pdf --export-pdf=out.pdf --export-latex

ただし、次のプロットでは、テキストは実際には一連のパスです。各文字は別々であるため、Inkscape は別のtexファイルを保存できません。

以下のコードで、テキストがテキストではなくパスとしてレンダリングされるのはなぜですか? usetex=Trueの使用は違いがないことに注意してください。

ありがとう。

from scipy.stats import lognorm
from matplotlib import rc

#rc('text', usetex=True)
rc('font', family='Times New Roman')
rc('font', size='20.0')

mu    = 1.7
sigma = 1.1
n, bins, patches = plt.hist(data, bins=10000, facecolor='k', edgecolor='k', 
                            normed=True, alpha=0.3, histtype='stepfilled',
                            label='\\noindent Empirical data')
y = lognorm.pdf( bins, sigma, scale=np.exp(mu))
plt.xlim( (0,50) )
plt.plot(bins, y, '-', color='k', linewidth=2, label='\\noindent Lognormal curve')
plt.ylim( (0, .15) )
plt.xlabel('my x label')
plt.ylabel('my y label')

plt.grid()
plt.legend()
plt.savefig(os.path.expanduser('~/myfile.svg'))
4

2 に答える 2

31

私は同じ問題に遭遇し、それを修正しました。

http://matplotlib.org/users/customizing.htmlのmatplotlibドキュメントにsvg.fonttypeは、パラメーターのデフォルト値は'path'であると記載されています。これは、svg形式にエクスポートするときに文字がパスに変換されることを意味します。

スクリプトに次の行を追加するだけで済みました。

matplotlib.rcParams['svg.fonttype'] = 'none'

このようにして、すべての文字が正しく埋め込まれるようになりました。これで、Inkscapeでテキストを編集し、図をpdf + Latexにエクスポートできます。つまり、ファイルに含めるpdfファイルとpdf_texファイルtexです。

于 2013-02-21T09:43:04.567 に答える