matplotlib为何不在图例中写\approx LaTeX字符?

4 投票
1 回答
4889 浏览
提问于 2025-04-18 13:15

出于某种原因,我无法让 matplotlib 在图例中写出 \approx 这个 LaTeX 符号。

下面是一个简单的示例:

import matplotlib.pyplot as plt
plt.scatter([0.5, 0.5], [0.5, 0.5], label='$U_{c} \approx %0.1f$' % 22)
#plt.scatter([0.5, 0.5], [0.5, 0.5], label='$U_{c} \simeq %0.1f$' % 22)
#plt.scatter([0.5, 0.5], [0.5, 0.5], label='$U_{c} \sim %0.1f$' % 22)
plt.legend(fancybox=True, loc='upper right', scatterpoints=1, fontsize=16)
plt.show()

注意,第一行不会显示 \approx 字符或者它后面的值,但 \simeq\sim 都能正常显示。

我刚在 matplotlib 的 GitHub 上开了一个 新问题,但我突然想到我可能做错了什么,所以还是问一下比较好。如果真的是我错了,我会 删除 关闭这个问题。

1 个回答

9

试试用原始字符串字面量:r'$U_{c} \approx %0.1f$'

In [8]: plt.scatter([0.5, 0.5], [0.5, 0.5], label=r'$U_{c} \approx %0.1f$'%22)
Out[8]: <matplotlib.collections.PathCollection at 0x7f799249e550>
In [9]: plt.legend(fancybox=True, loc='best')
Out[9]: <matplotlib.legend.Legend at 0x7f79925e1550>
In [10]: plt.show()

这里插入图片描述

出现这个问题的原因如下:

  • 如果字符串前面没有加r,解释器会把这个字符串理解成:

    '$U_{c} ' + '\a' + 'pprox 22.0$'

  • 这里的'\a'是一个特殊的转义字符,代表ASCII铃声:BEL

  • 这个被解释的字符串会传给TeX解析器。但是,因为'\approx'被搞混了,TeX解析器不知道怎么把你的字符串转换成正确的TeX格式。

为了确保字符串中的反斜杠(\)不会产生奇怪的转义字符,前面加上r

撰写回答