Ant*_*rth 1 python equation image matplotlib tex
使用python库matplotlib,我发现了这个问题的解决方案:通过利用matplotlibs TeX标记
在PyQt中显示(很好地)代数表达式.
我想做的是从我的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')
Run Code Online (Sandbox Code Playgroud)
但是,pyplot模块主要用于显示图形和图形,而不是我需要的文本样本.该代码的结果通常是一个巨大的白色空白图像左下角的一小部分文本.
如果我的公式涉及分数,因此需要向下空间,它将被截断,如下图所示.
请注意,这显示为空白图像; 查看显示的左侧坐标(0,0)处的
分数被截断并被空格包围
我相信我可以创建一个非常大(空间明智)的图形,在空白图的中间写出公式,保存它,并使用像素分析将其修剪为尽可能小的图像,但这看起来相当粗糙.
这些图是matplotlib的唯一预期输出吗?
有没有什么专门用于输出方程式,这不需要我担心文本的所有额外空间或位置?
谢谢!
诀窍是渲染文本,然后获取其边界框,最后调整图形大小和新图中文本的垂直位置.这会将图形保存两次,但在任何文本引擎中都很常见,只有在渲染文本后才能正确获取正确的边界框和其他参数.
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)
Run Code Online (Sandbox Code Playgroud)
在0.005不断加入width和height因为,很显然,对于某些文本Matplotlib返回一个略微低估了边界框,即比要求小.
| 归档时间: |
|
| 查看次数: |
1973 次 |
| 最近记录: |