文字换行仅适用于matplotlib中的垂直标签

2024-09-28 22:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑下面的情节,我们将相同的数据用垂直标签绘制到A面板中,并用文本包装用水平标签将其插入B面板。

import matplotlib.pyplot as plt

x = "Very long label"
y = "Even much longer label"
z = "Now this is what I call a really long label"

l = [x, y, z]
d = [3, 1, 4]

fig, (axA, axB) = plt.subplots(1, 2, figsize=(10, 5))

axA.bar(l, d)
font_dictA={"va": "center", "ha": "right", "rotation": 90, "wrap": True}
axA.set_xticklabels(l, fontdict= font_dictA)
axA.set_title("Case A: vertical labels")

axB.bar(l, d)
font_dictB={"va": "top", "ha": "center", "rotation": 0, "wrap": True}
axB.set_xticklabels(l, fontdict= font_dictB)
axB.set_title("Case B: horizontal labels")

plt.subplots_adjust(bottom=0.2)
plt.show()

给出以下输出:

enter image description here

我假设文字换行不适用于水平标签是由于边界框计算中的差异造成的,边界框计算是通过考虑轴和边框(垂直标签)而不是相邻的标签文字框(水平标签)来确定的。我们能否轻松地为水平标签设置标签的文本框尺寸(思考:定义其最大宽度)?
请注意,我只想使用matplotlib功能包装标签/图例/文本的文本;我不需要像textwrap这样的外部库,也不需要像旋转标签这样的其他解决方案


Tags: 文本面板matplotlib水平barplt标签label
1条回答
网友
1楼 · 发布于 2024-09-28 22:14:10

文本换行不会将文本换行以避免重叠,它会在尝试超出图形时换行文本

对于垂直标签,matplotlib似乎会将文本包装成漂亮的标签,但它只是防止文本超出图形。当您设置紧凑布局时,您可以验证这一点-不会发生包装,只是收缩轴以适应标签,因此无需包装它们(如果可能的话)

如果将水平标签设置得太长,以至于它们会超出图形,则它们将被包裹,但仅限于那些超出图形的标签。 enter image description here

另见{}中的{a2}

Return a copy of the text with new lines added, so that the text is wrapped relative to the parent figure.

相关问题 更多 >