使用Python将方程式渲染为.png文件

pet*_*min 5 python matplotlib

我想将方程式渲染为PNG文件,并将它们嵌入到我的库的HTML文档中.我已经在其他项目中使用了pylab(matplotlib).

我没有在http://matplotlib.sourceforge.net/users/usetex.htmlhttp://matplotlib.sourceforge.net/users/mathtext.html找到任何线索.

当我做

plt.title(r'$\alpha > \beta$')
plt.show()
Run Code Online (Sandbox Code Playgroud)

我得到一个带有轴的标题空图.

更新:

经过一些研究后我发现,将LaTeX渲染到png的最简单方法是使用mathext(http://code.google.com/p/mathtex/).

令人惊讶的是,我已经将所有需要的库从源代码中构建出来.

无论如何,感谢大家的回复.

更新2:

我做了一些mathtex的测试,发现它不支持矩阵(\ begin {pmatrix})和其他一些我需要的东西.所以,我要安装LaTex(MikTeX).

更新3:

我安装了proTeXt.这是巨大的,但易于使用和快速.恕我直言,现在它是渲染方程的唯一方法.

war*_*iuc 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)
Run Code Online (Sandbox Code Playgroud)


Ewy*_*ato 2

  • () 如果您使用 IPython 解释器,它默认将所有单个 matplotlib 步骤渲染到图形窗口中。

    因此,plt.title(r'$\alpha > \beta$')在 IPython 中,即使在调用 .show() 之前也会立即创建一个图形。另一方面,使用terminal/cmd/IDLE 则不会。

  • plt.show()无论您是否使用 IPython,都会创建一个图形窗口,您需要将该行更改为:

    plt.savefig('filename.png')
    
    Run Code Online (Sandbox Code Playgroud)

编辑:好吧,我误解了你的问题。正如 @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
Run Code Online (Sandbox Code Playgroud)

这是通过隐藏轴刻度并在绘图内添加文本来完成的。

但是...这并不是真正“不绘制”图形:\ 尽管您可以进行后期处理,例如使用 PIL 裁剪图像。

  • 我得到 `/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_gtk3.py:215: 警告:尝试删除 GLib.source_remove(self._idle_event_id) 时未找到源 ID 7`当执行最后一段代码时。 (2认同)