【问题标题】:Uniform spacing with Matplotlib and TeX使用 Matplotlib 和 TeX 实现统一间距
【发布时间】:2013-05-29 01:02:59
【问题描述】:

我正在为数学课绘制一些图表,但我无法在情节图例中完全正确地获得和平定义的间距。我目前正在使用

\,

对于 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(比如matplotlib.org/users/usetex.html)?
  • 不,我使用的是 r^ & $$ 方法。
  • 你可能很难让它达到像素完美,因为我不认为 matplotlib 的图例标签概念旨在支持标签不同部分的这种对齐方式。您可以尝试使用usetex,它使用真正的 TeX 而不是 matplotlib 的近似值,但我不知道这是否会有所改善。
  • 您会考虑使用等宽字体而不是默认衬线字体吗?

标签: python matplotlib tex


【解决方案1】:

您当然可以通过访问较低级别的 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$}"

诚然,这并不完美,但结合多个\makebox 和填充,您可以微调您需要的内容。理想情况下,您可以编写一个自定义的图例处理程序,该处理程序“知道”多行 TeX 块,但我确信这不是微不足道的。

【讨论】:

  • 嘿上瘾,感谢您的出色回答。我对数学和工程学的研究已经足够深入,我很快就会开始写研究论文。对于熟悉 CSS、Java 和 Python 的程序员,你有什么好的学习 TeX 的资源吗?
  • @Brandon 嗯,总是有tex.stackexchange.com :) 为了帮助找到您正在寻找的符号,有detexify.kirelabs.org/classify.html
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2018-11-29
  • 2012-04-12
相关资源
最近更新 更多