我有一个matplotlib axes实例,在其中我通过blitting为AxesImage添加了动画。
我想要做的是在x轴上对刻度进行动画处理。我经常更新AxesImage上的数据(以及随后绘制的艺术家),每次更新时,我都想移动一个额外的刻度,以突出显示某些东西的位置。这就是我现在正在做的:
axis = axes.get_xaxis
im.set_data(new_data)
axis.set_ticks([10,20,30,x,t])
axis.set_ticklabels(["p", "u", "z", "z", "i"])
axes.draw_artist(im)
axes.draw_artist(axis)虽然我看到刻度正确更新,但标签却没有。我认为轴bbox不包括轴,这可能吗?如果是这样的话,我怎样才能让它有动画效果呢?我应该从其他地方复制和恢复吗?
发布于 2011-06-11 01:29:34
轴bbox不包括轴“内部”之外的任何内容(例如,它不包括刻度标签、标题等)。
绕过这一问题的一种快速方法是,当您进行this时,只获取图形的整个区域。(例如background = canvas.copy_from_bbox(fig.bbox))
如果您有多个子图,并且只想为其中一个子图设置动画,这可能会导致问题。在这种情况下,您可以按照background = canvas.copy_from_bbox(ax.bbox.expanded(1.1, 1.2))的思路做一些事情。不过,您必须猜测所需的比率。
如果你需要刻度标签的确切范围,那就有点麻烦了。最简单的方法是遍历ticklabel对象,并使用ax.bbox获得联合。您可以使用一行代码:ax.bbox.union([label.get_window_extent() for label in ax.get_xticklabels()])。
无论如何,我认为这三个选项中的一个应该能满足您的需求。
https://stackoverflow.com/questions/6299943
复制相似问题