为什么Matplotlib会切断我的(非常具体的)轴标签?

oknwwptz  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(201)

这是底线:我需要在坐标轴标签中使用希腊字母和下标来制作出版质量的图。然而,在一些相当特殊的情况下,标签在刻度标签附近被切断。例如,我确实需要为一些图使用$\ alpha_-$标签,但是$\ alpha $的底部被切断。有趣的是,这对$\ alpha_+$(或许多其他标签)来说不是问题。
一方面,这看起来像是使用默认字体大小时的显示问题--在查看Matplotlib的输出时,标签被切断,但在plt.savefig()之后看起来还可以。另一方面,我需要漂亮的大字体大小来发布,显然在使用大字体大小(比如22 pt)执行plt.savefig()之后,问题仍然存在。
我知道以前的一些帖子看起来可能是相关的(例如overlapssavefig cutoffsecond axis),但它们并不是我在这里问的问题。
一个非常简短的MRE展示了我的理解(Matplotlib版本3.5.1):

import matplotlib.pyplot as plt
plt.rc("axes", labelsize=22)
plt.plot([0,1],[0,1])
plt.ylabel(r"$\alpha_-$")
plt.show()

我试过几种方法:

  • 包括plt.tight_layout()来自动调整东西。在这种情况下没有帮助。
  • 增加填充,例如plt.rc('axes', labelpad=10)。这只是在变形的标签和刻度标签/轴之间放置了一个很大的空间。(另外,这也会影响任何x轴标签。)
  • 插入一个新行,例如plt.ylabel(r"$\alpha_-$" + "\n")。类似地,只会产生一些空白,而不固定标签。

我还注意到最后一点的错别字版本有一个奇怪的行为:在原始文本块plt.ylabel(r"$\alpha_-$\n")中保留换行符'\n',可以显示预期的标签。但是,很明显,我不希望标签中有'\n'。我意识到我可能只需要保存这个数字并裁剪掉不需要的'\n'--这将是一个强制的解决方案,当然不是理想的。
这显然是一个非常具体的问题--除了$\ alpha_-$之外,我不能用任何字符或下标重现这个问题。但是这是怎么回事呢?为什么Matplotlib知道如何显示$\ gamma_-$(以及许多其他选项),但却不知道我真正需要的标签?这个问题可以用Matplotlib的其他版本来解决吗?既然填充调整不能解决这个问题,我该怎么办呢?

gj3fmq9x

gj3fmq9x1#

如果有一个“更大”的下标,似乎效果更好

import matplotlib.pyplot as plt
plt.rc("axes", labelsize=22)
plt.plot([0,1],[0,1])
plt.ylabel(r"$\alpha_{x}$")
plt.show()

当下标是“-”时,我们就会遇到问题

如果你绝望了,这里有一个黑客,使整个阿尔法可见

plt.ylabel(r"$\alpha_{-_{_{_{.}}}}$")

只有当你非常仔细地看时,你才会看到那个微小的“"!
如果仍然太大,可以添加更多_{}层。
或者你可以找到一个显示为空白的字符,但是空格字符不适用于这个目的--我想TeX足够聪明,知道它不打印任何像素。

一次性解决方案

如果你的字符是一个减号,它看起来就像下划线。那么为什么不把它打印成一个(无下标的)下划线呢?这会让你觉得很脏吗?如果不是:

import matplotlib.pyplot as plt
plt.rc("axes", labelsize=22)
plt.plot([0,1],[0,1])
plt.ylabel(r"$\alpha\_$")
plt.show()

相关问题