matplotlib: clearing the scatter data before redrawing

前端 未结 1 1207
既然无缘
既然无缘 2021-01-07 02:56

I have a scatter plot, over an imshow (map). I want a click event to add a new scatter point, which I have done by scater(newx,newy)). The trouble is, I then want to add th

相关标签:
1条回答
  • 2021-01-07 03:32

    Firstly, you should have a good read of the events docs here.

    You can attach a function which gets called whenever the mouse is clicked. If you maintain a list of artists (points in this case) which can be picked, then you can ask if the mouse click event was inside the artists, and call the artist's remove method. If not, you can create a new artist, and add it to the list of clickable points:

    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    ax = plt.axes()
    
    ax.set_xlim(0, 1)
    ax.set_ylim(0, 1)
    
    pickable_artists = []
    pt, = ax.plot(0.5, 0.5, 'o')  # 5 points tolerance
    pickable_artists.append(pt)
    
    
    def onclick(event):
        if event.inaxes is not None and not hasattr(event, 'already_picked'):
            ax = event.inaxes
    
            remove = [artist for artist in pickable_artists if artist.contains(event)[0]]
    
            if not remove:
                # add a pt
                x, y = ax.transData.inverted().transform_point([event.x, event.y])
                pt, = ax.plot(x, y, 'o', picker=5)
                pickable_artists.append(pt)
            else:
                for artist in remove:
                    artist.remove()
            plt.draw()
    
    
    fig.canvas.mpl_connect('button_release_event', onclick)
    
    plt.show()
    

    enter image description here

    Hope this helps you achieve your dream. :-)

    0 讨论(0)
提交回复
热议问题