Python: matplotlibでLaTeX表記数式を表示



はじめに

フローチャートを描く記事で,分数 \frac は表示不可?と書いたが,調べてみたら,LaTeXのかなりの部分を表示できる方法があった.

(http://matplotlib.org/users/usetex.html)

準備

バックエンド

バックエンドというものを指定しておく必要があるらしい.

私の場合,過去にpyenvでインストールしたmatplotlibが動かなかった経緯があり,TkAggを指定している.

(対応)~/.marplotlibにmatplotlibrcというファイルを作成し,1行 backend : TkAggと書き込んで保存

(参考)

http://blog.livedoor.jp/mt_kinabalu/archives/48592087.html

http://qiita.com/katryo/items/918667f28301fdec89ba

type1cm.sty

あと,トライアル中に「type1cm.styが無い」というのが出たので,TeX で読み込むフォルダにこれをインストール.

私の場合,Mac に BasicTeX を入れているため,以下のフォルダに type1cm.sty を入れている.フォルダ mytool は標準で入っていない自分用スタイルファイルを入れておくフォルダ.


/usr/local/texlive/2015basic/texmf-local/tex/mytool/

テストプログラム

注意点

  • rc をインポートし以下を記載する
  • 
    from matplotlib import rc
    
    rc('text', usetex=True)
    
  • LaTeX表記テキストの先頭に r をつける
  • \displaystyle を使用可能(分数の表記が綺麗でバランスよくなる)
  • 以下記載例
  • 
    text14=r'$\displaystyle r=\sqrt{\frac{-2(1-\rho^2)\cdot\ln(1-p)}{1-2\rho\cdot\sin\theta\cdot\cos\theta}}$'
    
  • 出力画像ファイル名は,pdfであることを明記する
  • 
    fnameF='fig_tex_test.pdf'
    ......
    ......
    plt.savefig(fnameF)
    
  • \thickmuskip=0mu \medmuskip=0mu \thinmuskip=0muを入れることで式の長さを短く(圧縮)できる,成果図中の式(2)と(3)および式(12)と(13)の違いがその効果.
  • 
    text02='(2)   '+r'$\thickmuskip=0mu \medmuskip=0mu \thinmuskip=0mu \displaystyle f(x)=....
    

    (参考)http://oversleptabit.com/?p=556

サンプルプログラムコード

Program nameDescription
py_tex_test.pyDrawing program of mathematical equations using LaTeX in matplotlib

成果品

実行スクリプトは以下の通り.pdf出力されるので,ImageMagickによりpngに変換している.


python py_tex_test.py
convert -trim -density 400 fig_tex_test.pdf -bordercolor "white" -border 10x10 fig_tex_test.png

成果品は以下の通り.

png


inserted by FC2 system