一尘不染

如何为X轴上的刻度线设置动画?

python

我有一个matplotlib axes实例在其内部,我的动画AxesImage通过blit婷。

我想做的是也对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不包括轴,这可能吗?如果是这样,我该如何设置动画?我应该从其他地方复制并还原吗?


阅读 229

收藏
2021-01-20

共1个答案

一尘不染

轴bbox在轴“内部”之外不包含任何内容(例如,不包含刻度标签,标题等)

解决此问题的一种快速方法是在绘图时仅抓住图形的整个区域。(例如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()])

无论如何,我认为这三个选项之一应该可以满足您的需求。

2021-01-20