You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python绘图标题LaTeX格式问题:上下标多数字符无法完整显示

这个问题我太熟悉了!你遇到的是Matplotlib里LaTeX格式字符串和Python格式化语法的冲突问题,核心原因是你没给上下标的内容加上LaTeX的分组大括号,导致小数点后的部分被LaTeX当成了普通文本,而不是上下标的一部分。

咱们来拆解一下问题:

  • 你的原代码生成的标题字符串是$100^2.4_5.6$,而不是正确的$100^{2.4}_{5.6}$
  • LaTeX里,^_后面如果不加{},只会把紧跟的第一个字符当成上下标,所以^2.4会把2变成上标,.4留在正常行里,下标同理。

解决方法很简单,只需要在Python的格式字符串里,给上标和下标的变量套一层LaTeX的大括号——但因为Python的format语法里{}是占位符,所以要写两个{{}}来转义成LaTeX的{}

修正后的代码

import matplotlib.pyplot as plt

a = [100, 200, 300]
b = [2.4, 3.5, 6.7]
c = [5.6, 1.3, 4.2]

# 假设plots是包含子图对象的列表,比如通过plt.subplots生成
fig, plots = plt.subplots(1, 3)
for i in range(len(plots)):
    # 关键是格式字符串里的{{和}},转义后变成LaTeX的大括号
    plots[i].set_title(r"${0}^{{{1}}}_{{{2}}}$".format(a[i], b[i], c[i]))

plt.tight_layout()
plt.show()

更简洁的f-string写法(Python 3.6+支持)

如果你用的是较新版本的Python,用f-string会更直观:

plots[i].set_title(rf"${a[i]}^{{{b[i]}}}_{{{c[i]}}}$")

这样生成的LaTeX代码就是$100^{2.4}_{5.6}$,Matplotlib会正确把整个2.4作为上标、5.6作为下标渲染出来,不会再拆分小数点啦。

内容的提问来源于stack exchange,提问作者Banafsheh

火山引擎 最新活动