Matplotlib FuncAnimation动画中annotation注释无法动态更新问题求助
问题原理说明
你定位的textcoords='offset points'确实是导致注释不更新的核心原因,相关作用逻辑和问题诱因如下:
textcoords是Matplotlib注解的参数,用于定义xytext参数的坐标参考系。当设置为offset points时,xytext传入的(1, 7)代表相对于注解目标点(即xy参数传入的坐标)的偏移量,单位为磅,不是数据坐标系的坐标值。- 你在
update方法中调用的self.annot.set_position((x_co, y_co))修改的是xytext的坐标值,而非注解目标点xy的坐标值。在offset points的参考系下,将xytext设置为日期转码后的大数值,相当于让注释相对于目标点偏移了几万磅,直接超出画布可视范围,因此看起来没有更新。
修复方案
提供两种可直接落地的修改方式:
方式1:修改注解目标点坐标(推荐,保留原有偏移效果)
将update方法中修改注释位置的逻辑改为调整注解的目标点xy属性,偏移量会自动跟随目标点生效,无需额外调整其他参数:
def update(self, num): self.line.set_data(self.x[:num], self.y[:num]) x_co, y_co = mdates.date2num(self.x[num]), self.y[num] # 替换原来的set_position行,修改注解目标点坐标 self.annot.xy = (x_co, y_co) self.annot.set_text(self.x[num]) return self.line, self.annot
方式2:移除offset配置,使用绝对数据坐标
如果不需要注释和折线端点保持固定的像素偏移,也可以直接删掉注解初始化时的textcoords='offset points'参数,此时xytext默认使用和xy相同的数据坐标系,你原有set_position的写法可以正常生效。
内容的提问来源于stack exchange,提问作者Julkar9
相关产品推荐
相关产品推荐

