不幸的是,这个错误已经存在了很长时间,而且这里的大多数答案都认为问题是关于水平对齐而不是垂直间距。
该错误是已知的,并且有一个补丁可以修复它,但尚未合并,只是在过去一年半的时间里被列为需要审查。
有趣的是,这是一个相当令人困惑的错误。最初出现的问题是,出于某种原因,TeX 给一个减号(和其他几个数学符号)一个下降值,表明它延伸到基线以下。dvipng,用于在光栅后端创建标签,只是裁剪到可见,所以这无关紧要。但是为了保持实际上确实有下降的东西对齐,matplotlib 有一个单独的系统 dviread,它从 dvi 文件本身读取值。这将获取奇数下降值。然后 matplotlib 的对齐系统,认为 png 的一部分应该低于基线,将其向下移动。
错误报告中的修复非常简单,但我不完全确定它是如何工作的。但是,我已经尝试过了,它确实有效。
当然,这个问题是在 2013 年提出的,所以看起来这个补丁不会很快应用。那么有哪些替代方案呢?
一个简单的选择是在工作时忽略对齐问题,但是在进行演示输出时,使用 pdf 后端。如果您想要图像,您可以随时使用其他软件进行转换。pdf 后端不会遇到同样的问题,因为它处理 TeX 部分的方式完全不同。
另一种选择是只调整负 xticks 的位置。从理论上讲,您可以从 _get_layout 中提取精确的调整,这将为您提供下降值,但我不确定如何转换这些值。所以这里有一个只关注对齐的例子:
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(-10.0, 10.0, 100)
s = np.cos(t)
i = [-10,-5,0,5,10]
plt.rc('text', usetex=True)
plt.rc('font', family='serif', size=30)
plt.plot(t, s)
for n,l in zip(*plt.xticks()):
if n<0: l.set_position((0,0.014))