Matplotlib和TeX中的统一间距

5

我正在为数学课绘制一些图表,但在图例中无法正确地设置分段定义的间距。目前,我正在使用

\,

我需要在TeX中表示一个空格,但遇到了这样一种情况:由于左侧的方程式占用的空间不同,其中一个空格比另一个略高。以下是我的代码:

import matplotlib.pyplot as plt
import numpy as np
import math as math

# 0-1
x = np.linspace(0, 1)
y = np.power(x, 2)
plt.plot(x, y, label=r"$t^2 \,\,\,\,\,\, 0 \leq t \leq 1$")

#1-2
x = [1,2]
y = [1,1]
plt.plot(x, y, label=r"$1 \,\,\,\,\,\,\, 1 < t \leq 2$")

#2-3
x = np.linspace(2, 3)
y = 3-x
plt.plot(x, y, label=r"$3 - t \,\,\,\, 2 < t \leq 3$")


plt.grid()
plt.axis([0,3,0,1.5])
plt.legend(loc='upper right')
plt.show()

这是结果

如何以一种有效的方式格式化它,使其在左侧的像素大小不管多大都能正常工作?


你是否已经打开了 usetex (类似于 http://matplotlib.org/users/usetex.html)? - BrenBarn
不,我正在使用 r^ & $<tex>$ 方法。 - ceptno
2
你可能会发现这个像素完美的对齐很难实现,因为我认为 matplotlib 的图例标签设计并不支持这种将标签的不同部分进行对齐的方式。你可以尝试使用 usetex,它使用真正的 TeX 而不是 matplotlib 的近似版本,但我不知道这是否会改善情况。 - BrenBarn
你是否考虑使用等宽字体代替默认的衬线字体? - ASGM
1个回答

8

您可以通过访问更低级别的LaTeX来改善间距。首先,在图表顶部运行:

from matplotlib import rc
rc('text', usetex=True)

使用\makebox\hfill的组合,您可以填充两个部分之间的空格:

label=r"\makebox[4cm]{$t^2$ \hfill $0 \leq t \leq 1$}"
label=r"\makebox[4cm]{$1$ \hfill $1 < t \leq 2$}"
label=r"\makebox[4cm]{$3 - t$ \hfill $2 < t \leq 3$}"

enter image description here

诚然,这并不完美,但通过多个\makebox和fills的组合,您可以精确调整所需内容。理想情况下,您可以编写一个自定义的图例处理程序,该处理程序"了解"TeX的多行块,但我相信这是非常困难的。


嘿,Hooked,感谢你的好回答。我已经深入到数学和工程领域,很快就要开始写研究论文了。你有没有什么好的资源可以教会一个熟悉CSS、Java和Python的程序员学习TeX呢? - ceptno
1
@Brandon 嗯,总有 http://tex.stackexchange.com/ :) 可以帮助找到你要找的符号,还有 http://detexify.kirelabs.org/classify.html。 - Hooked

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接