2015-06-15 34 views
1

我試圖訪問matplotlib陰影的陰影區域,這樣我就可以不用做plt.cla() [因爲cla()也清除了包括軸標籤的整個軸]matplotlib中陰影區域fill_between的面向對象訪問

如果我在密謀我行,我可以這樣做:

import matplotlib.pyplot as plt 
ax = plt.gca() 
ax.plot(x,y) 
ax.set_xlabel('My Label Here') 

# then to remove the line, but not the axis label 
ax.lines.pop() 

然而,繪製區域我執行:

ax.fill_between(x, 0, y) 

所以ax.lines是空的。

如何清除陰影區域?

回答

3

作爲the documentation狀態fill_between返回PolyCollection實例。收藏品儲存在ax.collections。所以

ax.collections.pop() 

應該做的伎倆。

但是,我認爲您必須小心,如果存在ax.linesax.collections中的多個對象,請刪除正確的東西。所以你知道要刪除哪一個,你可以保存到對象的引用:

fill_between_col = ax.fill_between(x, 0, y) 

,然後刪除:

ax.collections.remove(fill_between_col) 

編輯:還有一種方法,也可能是最好的一個:全部藝術家有一種叫做remove的方法,它正是你想要的:

fill_between_col.remove() 
+0

感謝您的有用評論。試圖通過名稱手動彈出它們是一個好主意,儘管它似乎不起作用。如果我這樣做: my_line = ax.plot(x,y); my_line.pop() 這不會刪除該行(甚至在使用draw()強制重畫畫布之後) – IanRoberts

+0

這不是我所建議的。你不能在你必須調用的藝術家上調用'pop()':'ax.lines.remove(my_line)'。順便說一句:'ax.plot'總是返回一個列表(因爲你可以一次繪製多行),所以你應該使用'my_line = ax.plot(x,y)[0]' – hitzg

+0

太棒了, 。謝謝你的幫助。 – IanRoberts