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

Python 文字换行仅适用于matplotlib中的垂直标签,python,matplotlib,word-wrap,Python,Matplotlib,Word Wrap,考虑下面的图,其中我们使用垂直标签将相同的数据绘制到面板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]

考虑下面的图,其中我们使用垂直标签将相同的数据绘制到面板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()
给出以下输出:

我假设文字换行不适用于水平标签是由于边界框计算中的差异造成的,边界框计算是通过考虑轴和边框(垂直标签)而不是相邻的标签文字框(水平标签)来确定的。我们能否轻松地为水平标签设置标签的文本框尺寸(思考:定义其最大宽度)?

请注意,我只想使用matplotlib功能包装标签/图例/文本的文本;我不要求像旋转标签这样的外部库,也不要求其他解决方案。

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

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

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

另请参见
Text#u get_wrapped_Text()

返回添加了新行的文本副本,以便 相对于父图形包裹


我懂了。所以,没有办法通过设置边界框来强制文本换行,就像在图形设计软件中实现的那样?那将是一个非常好的新功能。据我所知,没有。是的,这确实是一个很好的功能。谢谢你纠正我的误解。回顾过去,matplotlib行为不符合我对其行为的看法。事实上,在(1,2)布局中,当与较低的子图冲突时,不会发生文本换行。