2013-10-24 8 views
7

複数行のプロット内の特定の線を削除したい。ベローは、最後のプロットされた行だけを削除し、削除したい行は削除しないので、私には十分ではありません。どうやってやるの?プログラム全体で特定の行を(名前、番号、参照によって)どのようにアドレス指定し、その行を削除できますか?あなたが参照している場合はMatplotlib - 特定の線または曲線を削除する方法

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

はあなたがremove(doc)関数EXを経てアーティストを削除することができます:

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

答えて

13

は、ほとんどすべてのプロット関数の artistオブジェクト作成元への参照を返します
ln.remove() 
im.remove() 
10

すべての行の参照を明示的に保存する必要はなく、削除する行のインデックスを知っている場合は、 maptplotlibがあなたのためにそれらを保存するという事実を利用することができます。

self.axes.lines 

は、matplotlib.lines.Line2Dのリストです。たとえばを削除するには、二行目が描かれたので、あなたが

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

この使用法を強くお勧めします。それは、Matplotlibの内部の詳細でなければならない多くのものに依存しており、それを2回行うと正しいことをしません。 – tacaswell

+0

これは私のために働いた唯一のものでした、ありがとう。 –

1

を行うことができます私は、同じニーズを持っていた私にとって、それは、データ系列にIDを追加し、見つけることによって、後でそれを削除するために整然とあることが判明しました指定されたIDを持つ系列(コレクション)。

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

ここに 'plt.collections'とは何ですか? – tacaswell

+0

pltはAxesです。 collectionsメンバには、基本的にplot()コマンドで作成されたデータ系列を含むプロットを構成するすべてのものがあります。 – Andrew

+0

これは、matplotlibがコレクションモジュールを持っているので非常に混乱しています( 'matplotlib.pyplot'には通常インポートされません。これは' plt'として慣習的にインポートされています)。 – 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

私の答えのコードが減衰しにくい二次システムのためのステップ応答を生成します。このコードは、プロットのオーバーレイを示すためにも使用できます。コードは、2つの時定数パラメータの応答をグラフィカルに生成して表示します。このコードは、forループでの彗星の作成も示しています。

関連する問題