2012-03-22 7 views
5

方程式をPNGファイルにレンダリングし、それらを私のライブラリのHTMLドキュメントに埋め込みたい。私はすでに他のプロジェクトでpylab(matplotlib)を使用しています。私はPythonを使用して.pngファイルへの方程式をレンダリングする

plt.title(r'$\alpha > \beta$') 
plt.show() 

を行うと

は私が軸と題し空の姿を取得http://matplotlib.sourceforge.net/users/usetex.htmlhttp://matplotlib.sourceforge.net/users/mathtext.html

内の任意の手掛かりを発見していません。

更新:

PNGへのLaTeXをレンダリングする最も簡単な方法は、mathext(http://code.google.com/p/mathtex/)を使用していることを、私が見つけたいくつかの研究を行った後。

驚くべきことに、私はソースからビルドするために、すべてのライブラリを用意していました。

とにかく、誰もお返事ありがとうございます。

アップデート2:

私はmathtexのいくつかのテストを行なったし、それが行列(\ {pmatrixのを}開始)と私は必要があるいくつかの他のものをサポートしていません発見しました。 私はLaTex(MikTeX)をインストールします。

アップデート3:

私はproTeXtをインストールしました。それは巨大ですが、使いやすく高速です。 IMHO、今のところ方程式をレンダリングする唯一の方法です。

+0

pngとしてレンダリングされた方程式を取得したいのですか、matplotlibイメージ内でmatplotlib /で行う必要がありますか? –

+0

あなたはhttp://matplotlib.org/users/usetex.htmlを見たことがありますか? –

答えて

2
  • source)あなたはIPythonインタプリタを使用している場合、それはデフォルトでFigureウィンドウにすべての単一matplotlibのステップをレンダリングします。

    したがって、IPythonのplt.title(r'$\alpha > \beta$')は、.show()を呼び出す前にすぐにFigureを作成します。一方、terminal/cmd/IDLEを使用しても、ターミナルは使用できません。あなたはIPythonを使用しているかどうかを

  • plt.show()は、Figureウィンドウを作成しますか、あなたはにその行を変更したい:

    plt.savefig('filename.png') 
    

編集: さて、私はあなたの質問を誤解しました。 @ Li-aung Yipが言ったように、あなたは純粋な方程式の画像にSympyを使いたいかもしれません。我々はまだ(あなたが再調整またはそれに応じてサイズを変更する必要があるかもしれません)しかし、あなたが望むものを達成するためにmatplotlibの中でいくつかのトリックを行うことができます。

import matplotlib.pyplot as plt 

#add text 
plt.text(0.01, 0.8, r'$\alpha > \beta$',fontsize=50) 

#hide axes 
fig = plt.gca() 
fig.axes.get_xaxis().set_visible(False) 
fig.axes.get_yaxis().set_visible(False) 
plt.draw() #or savefig 

は、これは、軸目盛りを隠し、プロット図内のテキストを追加することによって行われます。

しかし、これは本当に図を描画していません。\ PILで画像を切り抜くなどの後処理はできますが、

+0

plt.savefig( 'filename.png')は、そのファイルを、軸が – peterdemin

+0

の空の図形で作成します。解決策は私にとってはあまりにも厄介です。 – peterdemin

+2

'/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_gtk3.py:215:警告:ソースID 7は削除しようとしたときに見つかりませんでした GLib.source_remove(self._idle_event_id ) 'を返します。 –

2

render LaTeX equations to imagesのように聞こえます。依存関係を最小限に抑えてこれを行うさまざまな方法については、リンクされた質問を参照してください。 (いくつかはmatplotlibを含むものもあります。)

LaTeXをインストールしたり、インストールされているLaTeXに頼っている場合は、LaTeX自体を使用して式をポストスクリプトにしてイメージフォーマットにすることができます。

6

これが私の仕事:

# https://gist.github.com/tonyseek/95c90638cf43a87e723b 

from cStringIO import StringIO 

import matplotlib.pyplot as plt 

def render_latex(formula, fontsize=12, dpi=300, format_='svg'): 
    """Renders LaTeX formula into image. 
    """ 
    fig = plt.figure(figsize=(0.01, 0.01)) 
    fig.text(0, 0, u'${}$'.format(formula), fontsize=fontsize) 
    buffer_ = StringIO() 
    fig.savefig(buffer_, dpi=dpi, transparent=True, format=format_, bbox_inches='tight', pad_inches=0.0) 
    plt.close(fig) 
    return buffer_.getvalue() 

if __name__ == '__main__': 
    image_bytes = render_latex(
     r'\theta=\theta+C(1+\theta-\beta)\sqrt{1-\theta}succ_mul', 
     fontsize=10, dpi=200, format_='png') 
    with open('formula.png', 'wb') as image_file: 
     image_file.write(image_bytes) 
+0

これまで私が見てきた唯一の具体的な答えです。他のすべての人は、今や死んでいるように見えるプロジェクトを推奨するか、本当の答えがない質問を指し示します。 –

0

を私は、Python 3での長時間の@ warvariucの答えをいじって、次の解決策を考え出しました。それは非常に似ていますが、いくつかの重要な違いがあります。まず、StringIOcStringIOはPy3のモジュールではありません。第2に、等価クラスio.StringIOは、MatPlotLibの少なくともいくつかのバージョンでは動作しません。このスレッド:http://matplotlib.1069221.n5.nabble.com/savefig-and-StringIO-error-on-Python3-td44241.htmlを参照してください。基本的に、画像はバイナリなので、io.BytesIOを使用する必要があります。 getvalue()メソッドはStringIOと同様に動作します。

from io import BytesIO 
import matplotlib.pyplot as plt 

def renderLatex(formula, fontsize=12, dpi=300, format='svg', file=None): 
    """Renders LaTeX formula into image or prints to file. 
    """ 
    fig = plt.figure(figsize=(0.01, 0.01)) 
    fig.text(0, 0, u'${}$'.format(formula), fontsize=fontsize) 

    output = BytesIO() if file is None else file 
    with warnings.catch_warnings(): 
     warnings.filterwarnings('ignore', category=MathTextWarning) 
     fig.savefig(output, dpi=dpi, transparent=True, format=format, 
        bbox_inches='tight', pad_inches=0.0, frameon=False) 

    plt.close(fig) 

    if file is None: 
     output.seek(0) 
     return output 

警告が、私は数字に関連しているかなり確信しているものだった:それは自分自身のためにあなたがファイル名に渡されたかどうかを決定することができますので、私は、ファイルのオープンを行うにはsavefigを使用しての自由を取りましたサイズ。あなたが望むならば、同封のwithを完全に取り除くことができます。シークの理由は、 "ファイル"を読みやすくすることです(ここで最もよく説明されています:https://stackoverflow.com/a/8598881/2988730)。

+0

これは行列で動作しますか? – peterdemin

+0

はい、設定をしなければなりません。参照:http://stackoverflow.com/a/26331197/2988730 –

関連する問題