我有一个matplotlib axes实例在其内部,我的动画AxesImage通过blit婷。
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不包括轴,这可能吗?如果是这样,我该如何设置动画?我应该从其他地方复制并还原吗?
轴bbox在轴“内部”之外不包含任何内容(例如,不包含刻度标签,标题等)
解决此问题的一种快速方法是在绘图时仅抓住图形的整个区域。(例如background = canvas.copy_from_bbox(fig.bbox))
background = canvas.copy_from_bbox(fig.bbox)
如果您有多个子图并且只想为其中一个设置动画,则可能会导致问题。在这种情况下,您可以按照进行操作background = canvas.copy_from_bbox(ax.bbox.expanded(1.1, 1.2))。不过,您必须估算所需的比率。
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()])。
ax.bbox
ax.bbox.union([label.get_window_extent() for label in ax.get_xticklabels()])
无论如何,我认为这三个选项之一应该可以满足您的需求。