2011-06-09 209 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