2017-10-03 23 views
0

私は、プロット上に線を描画するためにbutton_press_eventsを使用したいと思います。 次のコードはこれを行いますが、行の座標はお互いに続いています。button_press_eventを使用してプロットに別の線を描画する

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111) 
# Plot some random data 
values = np.random.rand(4,1); 
graph_1, = ax.plot(values, label='original curve') 
graph_2, = ax.plot([], marker='.') 

# Keep track of x/y coordinates 
xcoords = [] 
ycoords = [] 

def onclick(event): 
    xcoords.append(event.xdata) 
    ycoords.append(event.ydata) 

    # Update plotted coordinates 
    graph_2.set_xdata(xcoords) 
    graph_2.set_ydata(ycoords) 

    # Refresh the plot 
    fig.canvas.draw() 

cid = fig.canvas.mpl_connect('button_press_event', onclick) 
plt.show() 

enter image description here

にはどうすればいいので、イベント別のライン内のすべての第2のクリック結果を分けるのですか?

答えて

0

このような何かがトリックを行う必要があります。 このコードでは、軸の内部または外部でクリックが検出されたかどうかを検出するなど、改善する必要があることがたくさんありますが、正しいトラックに配置する必要があります。

fig = plt.figure() 
ax = fig.add_subplot(111) 
# Plot some random data 
values = np.random.rand(4,1); 
graph_1, = ax.plot(values, label='original curve') 

# Keep track of x/y coordinates 
lines = [] 
xcoords = [] 
ycoords = [] 

def onclick(event): 
    xcoords.append(event.xdata) 
    ycoords.append(event.ydata) 
    if len(xcoords)==2: 
     lines.append(ax.plot(xcoords,ycoords,'.-')) 
     xcoords[:] = [] 
     ycoords[:] = [] 

    # Refresh the plot 
    fig.canvas.draw() 

cid = fig.canvas.mpl_connect('button_press_event', onclick) 
plt.show() 

enter image description here

+0

多くのおかげで、これは完璧に動作します。 –

関連する問題