2011-06-09 226 views
4

我有一个matplotlibaxes实例,其中我通过blit动画AxesImage丁。动画matplotlib轴/刻度

我想要做的是在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不包括轴,这可能吗?如果是这样,我该如何动画呢?我应该从其他地方复制和恢复吗?

回答

4

轴线BBOX不包括的轴的“内部”以外的任何东西(例如,它不包括刻度标记,标题等)

一个快速的方法解决这个是刚刚抢当你blitting时,这个图的整个区域。 (例如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()])

无论如何,这三个选项中的一个应该做你需要的,我想。

+0

非常彻底的答案!我认为第一个选项就足够了(我将所有的小插图同步动画),但它们都可能变得有用! – Agos 2011-06-11 00:29:41