2013-10-24 29 views
7

Belirli bir satırı birden fazla satıra ait bir grafikte kaldırmak istiyorum. Körük benim için yeterli olmayan belirli bir örnektir, çünkü kaldırmak istediğim çizgiyi değil, sadece son çizilen çizgiyi kaldırır. Bunu nasıl yapabilirim? Program boyunca belirli bir çizgiyi (ada göre, numaraya göre) nasıl adresleyebilirim ve o satırı silebilirim? Eğer başvuru varsaMatplotlib - Belirli bir çizgi veya eğri nasıl kaldırılır

ln, = plot(x, y) # plot actually returns a list of artists, hence the , 
im = imshow(Z) 

Eğer remove(doc) fonksiyon eski aracılığıyla bir sanatçı kaldırabilirsiniz:

self.axes.lines.remove(self.axes.lines[0]) 

cevap

13

hemen hepsi komplo fonksiyonların artist nesne oluşturulan eski bir başvuru döndürür
ln.remove() 
im.remove() 
10

Tüm satırların başvurusunu açıkça kaydetmek istemiyorsanız, ancak kaldırmak istediğiniz satırın dizinini biliyorsanız, maptplotlib'in bunları sizin için sakladığı gerçeğini kullanabilir.

self.axes.lines 

, matplotlib.lines.Line2D'un bir listesidir. Yani çizilen ikinci çizgi ben aynı ihtiyacı vardı

self.axes.lines[1].remove() 
+0

Bu kullanımdan kesinlikle vazgeçiyorum. Matplotlib'in iç detayları olan ve iki kere yaparsanız doğru olanı yapmaz. – tacaswell

+0

Bu benim için çalışan tek şeydi, teşekkürler. –

1

yapabilirsiniz örneğin kaldırmak ve benim için, veri serisine bir kimliği ekleyip bularak onu sonradan çıkarmak için Sessizleştirme olduğu ortaya çıktı etmek Verilen kimliğe sahip seri (koleksiyon). cevabım

def add_series(x, id): 
    plt.plot(x, gid = id) 

def remove_series(id): 
    for c in plt.collections: 
    if c.get_gid() == id: 
     c.remove() 
+0

Burada plt.collections nedir? – tacaswell

+0

plt bir Eksendir. Koleksiyon üyeler, temelde plot() komutu tarafından oluşturulan veri serilerini içeren arsaları oluşturan her şeye sahiptir. – Andrew

+0

Matplotlib'in bir koleksiyon modülüne sahip olması çok karmaşıktır (normalde "plp" olarak adlandırılan kongre ile olan 'matplotlib.pyplot' içine içe aktarılmaz). – tacaswell

0
import numpy as np 
import matplotlib.pyplot as plt 

The following programme runs on version 3.6. 
Code generates a pair of lines and the line 2 is removed in a for loop which 
simulates a comet effect 
pts=100 
t2 = np.linspace(0.0,5.0,pts) 
t2=(t2/50) 
tm=t2*(10**3) 
nz=t2.size 
tc=np.linspace(0.8,2.5,2) 
nz=tc.size 
for n in range (nz): 
    print(tc[n]) 
    resp = 1 - np.exp(-tc[n]*tm*10**-3*50) * np.cos(2*np.pi*50*tm*10**-3) 
    for m in range(pts): 
     plt.xlim(0,100) 
     plt.ylim(0,2) 
     plt.xlabel('Time,in milliseconds',fontsize=12) 
     plt.ylabel('Respose',fontsize=12) 
     plt.title('Underdamped Second Order System Step Response',fontsize=14) 
     line1,=plt.plot(tm[0:m+1],resp[0:m+1],color='black',linewidth=0.2) 
     line2,=plt.plot(tm[m],resp[m],marker='o',color='red',markersize=5) 
     ax = plt.gca() 
     plt.pause(0.02) 
     ax.lines.remove(line2) 
     plt.grid('on') 
plt.show() 
0

kod underdamped ikinci mertebeden sistem için adım yanıtı oluşturur. Kod ayrıca parsellerin üst üste binmesini göstermek için de kullanılabilir. Kod, zaman sabiti parametresinin iki değeri için yanıt olarak grafiksel olarak üretir ve görüntüler. Kod ayrıca bir for döngüsünde kuyruklu yıldız yaratılmasını da gösterir.

İlgili konular