2017-07-11 3 views
2

私はサブプロット上にいくつかのデータをプロットしようとしていますが、そのデータの一部を同じ図の別のサブプロットに移動しようとしています。私はちょうど1つの軸からアーティストを取り除き、もう一方の軸でそれを元に戻すことができますが、それは遅すぎるようです。代わりに、アーティストをある軸から別の軸へと動かすだけです。同じ図の1つの軸から別の軸にアーティストを移動する

私は軸からアーティストを簡単に削除できますが、もう一方に追加すると何もしないようです。 関連するコード:このコードを実行した後

artist.remove() 
artist.axes = self.ax1 
self.ax1.add_line(artist) 
self.fig.canvas.draw_idle() 

、選択されたアーティストは、最初の軸ではなくなりましたが、それは第二の軸上に表示されません。具体的には、アーチストは軸上にあり(ax2.childrenにはもう1つの要素があり、artist.axesはax2になります)、すべてを再描画しても視覚的に表示されません。

は、ここでの問題を示していますフル実施例である:

import matplotlib.pyplot as plt 
from matplotlib.lines import Line2D 
fig = plt.figure(figsize=(10,10)) 
ax1 = fig.add_subplot(121, picker=True) 
ax2 = fig.add_subplot(122, picker=True) 

v = [0,1,2,3,4] 

plt.ion() 

ax1.plot(v, picker=5) 

def onclick(event): 
    artist = event.artist 
    print(artist) 
    if isinstance(artist, Line2D): 
     artist.remove() 
     artist.axes = ax2 
     ax2.add_line(artist) 
     fig.canvas.draw() 


fig.canvas.mpl_connect('pick_event', onclick) 

plt.show() 

input('...') 

答えて

3

ます。また、アーティストのtransformだけでなく、そのaxesプロパティを変更する必要があります。

だから、あなたのonclick機能します:

def onclick(event): 
    artist = event.artist 
    print(artist) 
    if isinstance(artist, Line2D): 
     artist.remove() 
     artist.axes = ax2 
     artist.set_transform(ax2.transData) # <-- I added this line 
     ax2.add_line(artist) 
     fig.canvas.draw() 

、すべてが正常に動作する必要があります。あなたはおそらくもax2の軸の範囲を変更する必要があります

注、例えば:

ax2.set_xlim(ax1.get_xlim()) 
ax2.set_ylim(ax1.get_ylim()) 
+0

働いていました!どうもありがとうございます! –

関連する問題