如何在Matplotlib绘图中无需指定坐标即可完成文本定位?
动态图表固定外置文本的解决方案
核心问题是你之前使用了和坐标轴刻度绑定的数据坐标系计算位置,坐标轴范围变化时文本自然会偏移。改用混合坐标系即可完全不需要手动计算任何和刻度、轴范围相关的偏移量,位置固定不飘。
具体实现逻辑
使用混合变换工具让x轴用相对坐标轴的固定比例坐标,y轴沿用原数据坐标,即可实现x位置永远固定在轴外侧不会左右偏移,y位置始终和阈值线对齐。
修改后的代码
from matplotlib.transforms import blended_transform_factory # 定义混合变换:x用轴相对坐标(0-1对应轴左右边界),y用原数据坐标 custom_trans = blended_transform_factory(ax.transAxes, ax.transData) ax.text( 1.02, # 固定在x轴右边界往外2%的位置,不受坐标轴尺度变化影响 thresh, # y位置和阈值线对齐,沿用数据坐标 "趋势线超过阈值:" + x_cross.strftime("%Y-%m-%d"), {"color": "r", "fontsize": 10}, ha="left", # 文本左对齐,刚好贴合坐标轴外侧 va="bottom", rotation="vertical", transform=custom_trans, # 应用自定义混合坐标系 clip_on=False # 关闭裁剪,避免轴外文本被截断 )
效果说明
不需要再计算date_max+xaxis_shift、y_range这类和轴范围绑定的变量,不管图表的横轴时间范围、纵轴数值范围怎么变化,文本的相对位置都不会出现偏移。
内容的提问来源于stack exchange,提问作者Albert Rajan
相关产品推荐
相关产品推荐

