matplotlib — interactively select points or locations?

前端 未结 3 1608
误落风尘
误落风尘 2020-12-24 02:40

In R, there is a function locator which is like Matlab\'s ginput where you can click on the figure with a mouse and select any x,y coordinate. In a

相关标签:
3条回答
  • 2020-12-24 03:07

    You may want to use a pick event :

    fig = figure()
    ax1 = fig.add_subplot(111)
    ax1.set_title('custom picker for line data')
    line, = ax1.plot(rand(100), rand(100), 'o', picker=line_picker)
    fig.canvas.mpl_connect('pick_event', onpick2)
    

    Tolerance set by picker parameter there:

    line, = ax1.plot(rand(100), 'o', picker=5)  # 5 points tolerance
    
    0 讨论(0)
  • 2020-12-24 03:07

    Wow many years have passed! Now matplotlib also support the ginput function which has almost the same API as Matlab. So there is no need to hack by the mpl-connect and so on any more! (https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.ginput.html) For instance,

    plt.ginput(4)
    

    will let the user to select 4 points.

    0 讨论(0)
  • 2020-12-24 03:11
    from __future__ import print_function
    import matplotlib.pyplot as plt
    from matplotlib.lines import Line2D
    from matplotlib.patches import Rectangle
    from matplotlib.text import Text
    from matplotlib.image import AxesImage
    import numpy as np
    from numpy.random import rand
    
    if 1:
        fig, ax = plt.subplots()
        ax.set_title('click on points', picker=True)
        ax.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
        line, = ax.plot(rand(100), 'o', picker=5)
    
        def onpick1(event):
            if isinstance(event.artist, Line2D):
                thisline = event.artist
                xdata = thisline.get_xdata()
                ydata = thisline.get_ydata()
                ind = event.ind
                print 'X='+str(np.take(xdata, ind)[0]) # Print X point
                print 'Y='+str(np.take(ydata, ind)[0]) # Print Y point
    
        fig.canvas.mpl_connect('pick_event', onpick1)
    
    0 讨论(0)
提交回复
热议问题