Matplotlib / python clickable points

前端 未结 2 2014
小鲜肉
小鲜肉 2021-01-02 18:51

I have a bunch of time series data with points every 5 seconds. So, I can create a line plot and even smooth the data to have a smoother plot. The question is, is there any

2条回答
  •  灰色年华
    2021-01-02 19:37

    To expand on what @tcaswell said, see the documentation here: http://matplotlib.org/users/event_handling.html

    However, you might find a quick demo of pick events useful:

    import matplotlib.pyplot as plt
    
    def on_pick(event):
        artist = event.artist
        xmouse, ymouse = event.mouseevent.xdata, event.mouseevent.ydata
        x, y = artist.get_xdata(), artist.get_ydata()
        ind = event.ind
        print 'Artist picked:', event.artist
        print '{} vertices picked'.format(len(ind))
        print 'Pick between vertices {} and {}'.format(min(ind), max(ind)+1)
        print 'x, y of mouse: {:.2f},{:.2f}'.format(xmouse, ymouse)
        print 'Data point:', x[ind[0]], y[ind[0]]
        print
    
    fig, ax = plt.subplots()
    
    tolerance = 10 # points
    ax.plot(range(10), 'ro-', picker=tolerance)
    
    fig.canvas.callbacks.connect('pick_event', on_pick)
    
    plt.show()
    

    Exactly how you approach this will depend on what artist you're using (In other words, did you use ax.plot vs. ax.scatter vs. ax.imshow?).

    Pick events will have different attributes depending on the artist selected. There will always be event.artist and event.mouseevent. Most artists that have individual elements (e.g. Line2Ds, Collections, etc) will have a list of the index of the items selected as event.ind.

    If you'd like to draw a polygon and select points inside, see: http://matplotlib.org/examples/event_handling/lasso_demo.html#event-handling-example-code-lasso-demo-py

提交回复
热议问题