使用 matplotlib 从 TeX 创建数学表达式的图像

2024-05-09

使用 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(使用前将#替换为@)

使用 matplotlib 从 TeX 创建数学表达式的图像 的相关文章

随机推荐

  • 清理 Subversion 存储库的最佳方法是什么?

    我有一个不断增长的存储库 其中包含十几个我使用 TortoiseSVN 维护的项目 因为我对此完全陌生 还不知道其来龙去脉 我保存存储库的空间有限 因此我想备份它 然后删除一些旧版本 例如 如果一个项目的版本为 50 我只想保留 50 49
  • DateTimeFormatter 支持单个数字的月份日和年份

    DateTimeFormmater似乎无法处理该月的个位数日期 String format MM dd yyyy String date 5 3 1969 System out println new SimpleDateFormat fo
  • 使用Java查找无线网络的SSID

    我们正在做一个用 Java 编码的项目 为 JRE 1 6 编译 需要一些帮助 一个有点但明显复杂的功能 我们希望在连接特定无线网络时执行特定操作 例如当连接的 SSID myNetworkAtHome 或类似名称时 在浏览了这个网站 谷歌
  • Java如何从指定位置的字节读取部分文件?

    我遇到一种情况 我需要只读取文件的一部分 从指定的字节位置开始 我尝试下一步 protected void writePartToStream final InputStream in final OutputStream out long
  • 使用 GCD 异步 UITableViewCell 图像加载

    我目前正在尝试加载 Flickr 照片的 UITableView 列表 cs193p iOS 斯坦福大学 作业 5 为了避免 UI 阻塞事件 我将每个单元格的缩略图下载推迟到不同的队列中 但确实将 UI 更新回主队列中 此代码不会异步加载图
  • 将文件保存到 icloud 驱动器

    我正在尝试将文件保存到 icloud 驱动器 我要使用简单版本 不让用户选择保存文件的位置 我只是将其保存在 icloud 驱动器的根目录中 这是我正在使用的代码 func exportToFiles for page in pages l
  • 通过移动地址栏时,视差背景图像在移动设备上改变大小

    一周以来 我的视差元素一直在碰壁 寻求帮助对我来说是最后的手段 我已经在各种论坛上寻找这些问题的解决方案 但我尝试过的都没有效果 only在移动设备上 chrome 如果您按住触摸屏并继续向下滚动 则在初始屏幕图像之后 会出现一个白条 屏幕
  • Emacs/Swank/Paredit for Clojure 的温和教程

    我要转向 Emacs 来工作Clojure http en wikipedia org wiki Clojure Lisp 为了能够执行以下操作 我需要在 Emacs 上设置哪些信息 自动匹配 生成相应的右括号 自动缩进 Lisp Cloj
  • 在“弹出”模式下交换访问令牌时出现“redirect_uri_mismatch”

    我们根据此文档构建 Web 应用程序并与 Google OAuth2 集成Google 身份服务 JavaScript SDK https developers google com identity oauth2 web guides u
  • 对常量数组的未定义引用

    a cpp const unsigned char whatever 123 a h extern const unsigned char whatever 123 b cpp include a h unsigned char x wha
  • 使用 .NET SDK / C# 在 StarTeam 中查找文件的过去修订版本

    我正在尝试编写一个 C 程序来比较 StarTeam 存储库中不同版本的文件 查看文件的当前版本与给定的先前签入之间是否有任何更改 我目前能够从当前版本中查找 签出文件 但很难找到正确的方法来查找这些文件的过去版本 至少在 NET 方面 B
  • 如何创建提供自定义问题匹配器的 VS Code 扩展?

    我有一个使用自定义的项目problemMatcher 但我想将其提取到扩展中 使其可配置 所以最终它可以用于tasks json like problemMatcher myCustomProblemMatcher 怎么做 从 VSCode
  • 在 Vue.js 的 eslint 中删除“组件已注册但未使用”

    我正在实现动态组件 其中使用
  • 如何从后端 API 获取标头或特定标头?

    我想使用 fastAPI 从函数内的 API 中检索特定标头 但我找不到解决方案 在烧瓶中很简单 request headers your header name 为什么 fastAPI 做这么简单的事情却这么复杂 有人知道检索标头的解决方
  • 有条件地将可选组替换为 gsub

    一位用户问我如何做到这一点如何使 ggplot 图例中的选定单词变为斜体 https stackoverflow com questions 76054997 how to italicize select words in a ggplo
  • 除括号中的空格外,将字符串拆分为所有空格

    我正在尝试将文本拆分为以下内容 例如在空格上 var line Text what is what s a story fable called named about Search Title 但我希望它忽略括号内的空格 这应该产生一个数
  • 基于 SQS 队列大小的自动缩放

    我已将这些命令组合在一起 以根据 SQS 队列大小自动缩放 EC2 实例 我已运行所有命令 我的队列有 10 条消息 但尚未启动单个实例 我想弄清楚我的 cloudwatch 警报正在侦听哪个 SQS 队列 此外 我们还感谢任何有助于识别问
  • 将 ArrayList 保存到 SharedPreferences

    我有一个ArrayList与自定义对象 每个自定义对象都包含各种字符串和数字 即使用户离开活动然后想要稍后返回 我也需要该数组保留下来 但是在应用程序完全关闭后我不需要该数组可用 我通过使用这种方式保存了很多其他对象SharedPrefer
  • 如何使用 try.zorba.io 从 JSON 运行 JSONiq

    我需要编写一个 JSONiq 表达式 仅列出成本至少为 3 的产品的名称 这是我在XQuery部分 supermarket visit date 08032019 bought item type confectionary item na
  • 使用 matplotlib 从 TeX 创建数学表达式的图像

    使用 python 库 matplotlib 我发现了这个问题的解决方案 在 PyQt 中 很好地 显示代数表达式 https stackoverflow com questions 14097463 displaying nicely a