2017-10-03 1 views
0

Ich möchte button_press_events verwenden, um Linien auf einem Diagramm zu zeichnen. Der folgende Code macht das, aber die Linienkoordinaten folgen aufeinander.Verwenden von button_press_event, um separate Linien auf einem Diagramm zu zeichnen

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

Wie trenne ich die Ereignisse so jede Sekunde Klick Ergebnisse in einer separaten Zeile?

Antwort

0

So etwas sollte den Trick machen. Beachten Sie, dass in diesem Code viele Dinge verbessert werden müssen, z. B. das Erkennen, ob der Klick innerhalb oder außerhalb der Achsen erkannt wurde, aber Sie sollten auf die richtige Spur kommen.

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

Vielen Dank, das funktioniert perfekt. –

Verwandte Themen