Matplotlib中如何让文本在Bounding Box内居中对齐?
解决Matplotlib中旋转文本在Bounding Box内居中的问题
你遇到的问题是设置ha='center'后,仅能让文本的bbox(边界框)居中,但垂直旋转的文本自身在框内左偏。核心原因是Matplotlib默认的旋转模式是围绕文本bbox的中心旋转,而非你设置的锚点位置。
直接解决方案:添加rotation_mode='anchor'
在ax.text()的参数中加入rotation_mode='anchor',让文本先对齐到锚点(你设置的ha='center'和va='center'位置),再围绕锚点旋转,就能让文本精准在bbox内居中。修改后的代码如下:
import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt print(matplotlib.__version__) # 3.5.3 fig, ax = plt.subplots() ax.plot([.5, .5], [0, 1], transform=ax.transAxes) ax.text(.5, .5, 'This text needs to be center-aligned'.upper(), ha='center', va='center', rotation='vertical', rotation_mode='anchor', # 新增该行参数 transform=ax.transAxes, bbox=dict(fc='blue', alpha=.5)) ax.set_title('文本与Bounding Box均已居中对齐') plt.show()
原理说明
- 默认的
rotation_mode='default'逻辑是:先计算文本的bbox,再围绕bbox的中心旋转,这会导致旋转后的文本相对锚点偏移,出现"框居中但文本偏左"的情况。 rotation_mode='anchor'的逻辑是:先将文本对齐到你设定的锚点位置,再围绕锚点完成旋转,确保旋转后的文本始终以锚点为中心,自然与bbox保持居中对齐。
内容的提问来源于stack exchange,提问作者Wouter
相关产品推荐
相关产品推荐

