使用 python 库 matplotlib,我发现了这个问题的解决方案:
在 PyQt 中(很好地)显示代数表达式 https://stackoverflow.com/questions/14097463/displaying-nicely-an-algebraic-expression-in-pyqt通过利用 matplotlibsTeX 标记 http://matplotlib.org/users/mathtext.html.
我想做的是从我的 python 程序中获取代表数学表达式的 TeX 代码,并将其保存到可以在我的 PyQt GUI 中显示的图像,而不是以丑陋的纯文本显示方程。
本质上是这样的……
import matplotlib.pyplot as plt
formula = '$x=3^2$'
fig = plt.figure()
fig.text(0,0,formula)
fig.savefig('formula.png')
但是,pyplot 模块主要用于显示图形和绘图,而不是我需要的文本示例。该代码的结果通常是在巨大的白色空白图像的左下角显示一小段文本。
如果我的公式涉及分数,因此需要向下的空间,它会被截断,如下图所示。
请注意,这显示为空白图像;查看显示屏的左侧
坐标 (0,0) 处的分数被截断并被空格包围 https://i.stack.imgur.com/gbxek.png
我相信我可以创建一个非常大(空间方面)的图形,在空白图的中间写下公式,保存它,并使用像素分析将其修剪为尽可能小的图像,但这看起来相当粗糙。
绘图是 matplotlib 的唯一预期输出吗?
是否有什么专门用于输出方程,而不需要我担心文本的所有额外空间或位置?
Thanks!
诀窍是渲染文本,然后获取其边界框,最后调整图形大小和文本在新图形中的垂直位置。这可以两次保存图形,但正如任何文本引擎中常见的那样,只有在渲染文本后才能正确获得正确的边界框和其他参数。
import pylab
formula = r'$x=3^2, y = \frac{1}{\frac{2}{3}}, %s$' % ('test' * 20)
fig = pylab.figure()
text = fig.text(0, 0, formula)
# Saving the figure will render the text.
dpi = 300
fig.savefig('formula.png', dpi=dpi)
# Now we can work with text's bounding box.
bbox = text.get_window_extent()
width, height = bbox.size / float(dpi) + 0.005
# Adjust the figure size so it can hold the entire text.
fig.set_size_inches((width, height))
# Adjust text's vertical position.
dy = (bbox.ymin/float(dpi))/height
text.set_position((0, -dy))
# Save the adjusted text.
fig.savefig('formula.png', dpi=dpi)
The 0.005
常数被添加到width
and height
因为显然,对于某些文本,Matplotlib 返回的边界框被稍微低估了,即小于所需的边界框。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)