在matplotlib中更改刻度标签行间距

6 投票
2 回答
5433 浏览
提问于 2025-04-18 15:21

我有一个比较杂乱的图表,y轴的标签需要很长。我用 textwrap 把它们分成多行,但这样会导致标签之间重叠(或者至少太靠近了)。

我尝试过通过调整刻度间距、放大图表、改变字体或缩小文字来解决这个问题,但都没有效果。(这些方法我都试过了)

我觉得如果能调整行间距/行高,让它比字体要求的要小,就能解决这个问题。

为了简单起见,想象一下下面这个刻度标签,它迫切需要缩短行与行之间的距离:

from matplotlib import pyplot as plt
plt.barh(0.75, 10, height=0.5)
plt.ylim(0, 2)
plt.yticks([1], ["A very long label\nbroken into 2 line"])
plt.subplots_adjust(left=0.3)
plt.show()

我查看了 plt.tick_params()rcParams,但没有找到明显的解决办法。我在格式化文本时使用了 latex,但在刻度标签字符串中尝试使用 \hspace(0.5em} 似乎没有效果,反而让情况更糟。

如果有人能提供减少行间距的建议,我将非常感激。

2 个回答

0

试试这个:

pylab.rcParams['xtick.major.pad']='???'

可以调整一下???这个值,看看能不能得到你喜欢的效果。你也可以试试(使用OO接口):

fig = plt.figure()
ax = fig.add_subplot(111)
ax.tick_params(axis='both', which='major', labelsize=8)
ax.set_yticks([1], ["A very long label\nbroken into 2 line"], linespacing=0.5)
plt.show()

labelsize命令可以改变你的字体大小。

把上面的内容和rcparams设置结合起来使用。

3

你可以在你的 plt.yticks 代码中使用 linespacing 这个关键词。比如说:

plt.yticks([1], ["A very long label\nbroken into 2 line"],linespacing=0.5)

你可以根据自己的需要调整 linespacing 的具体数值。希望这对你有帮助。

这是你代码的原始输出: 默认行间距

这是行间距设置为 0.5 后的效果: 在这里输入图片描述

撰写回答