2011-11-21 51 views
4

我有幾個plt.plot實例,我只想要plt.show()某些對象。爲了說明這裏是一些代碼:matplotlib plt.show()只選對象

import matplotlib.pyplot as plt 

ax1 = plt.plot(range(5),range(5)) 
ax2 = plt.plot([x+1 for x in range(5)],[x+1 for x in range(5)]) 
ax3 = plt.plot([x+2 for x in range(5)],[x+2 for x in range(5)]) 

#plt.show([ax1,ax2]) 
plt.show() 

所以我想是這樣的註釋語句,以僅顯示AX1中的示例圖& AX2。

回答

3

您可以從設定的當前座標的行去除一些繪製線:

axes = plt.gca() # Get current axes 
axes.lines.remove(ax2[0]) # Removes the (first and only) line created in ax2 
plt.draw() # Updates the graph (in interactive mode) 

如果你想要把它放回去,你同樣可以做到

axes.lines.append(ax2[0]) # Puts the line back (the drawing order is changed, here) 

你可以或者保存當前的圖線,如果需要稍後放回:

all_lines = list(axes.lines) # Copy 
# ... 
axes.lines[:] = all_lines # All lines put back 

關鍵po int是每個plot()命令添加一條線到當前軸並繪製它(在交互模式下)。所以你可以刪除已經繪製的線(就像在這個答案中一樣)。

正如Yann指出的,你也可以使一些線條隱形。然而,從這個答案的方法可能會更快,因爲要繪製的線數較少(如果這很重要)。

+0

謝謝,速度是一個問題,所以我寧願這種方法。真的認爲這很簡單,我錯過了一些明顯的東西 – Anake

+0

@Anake:謝謝。所有這一切背後的原理是繪製了一些東西:一個'plot()'調用將線條等對象添加到Matplotlib Axis中,並且大多忘記它們來自哪裏。一旦添加完成,刪除它們一定需要幾個步驟。 – EOL

3

不完全。首先,plt.plot調用不返回軸,它將返回Line2D對象的列表,每個繪製一條線。您可以使用Matplotlib的OO界面爲每個繪圖創建一個單獨的座標軸,然後有選擇地將它們添加爲子圖等。有多種不同的方式可以選擇性地顯示繪圖。

但是對於你的例子,你可以利用Line2D的alpha值,即它是多麼不透明,使任何一條線不可見。這裏是你的榜樣的修改版本:

import matplotlib.pyplot as plt 

line1 = plt.plot(range(5),range(5)) 
line2 = plt.plot([x+1 for x in range(5)],[x+1 for x in range(5)]) 
line3 = plt.plot([x+2 for x in range(5)],[x+2 for x in range(5)]) 
print line3, " see I'm a list of lines" 
print line3[0].get_alpha() 
line3[0].set_alpha(0) # make complete opaque 

#plt.show([ax1,ax2]) 
plt.gcf().savefig('line3opaque.png') 
line3[0].set_alpha(1) # make visible 
line1[0].set_alpha(0) # make opaque 
plt.gcf().savefig('line1opaque.png') 
plt.show() 

我儲存的第一個數字是「line3opaque.png」;這是我得到:

enter image description here 3號線不在那裏,1號線和2號線是。對於 'line1opaque.png' 我得到:

enter image description here

現在我們行1人失蹤。