Matplotlib:重新绘制散点图前清除散点数据

3
我有一个散点图,位于imshow(地图)上方。 我想要通过单击事件添加新的散点,我已经用scatter(newx,newy)完成了这个操作。问题是,我想添加使用pick事件删除点的功能。由于没有remove(pickX,PickY)函数,我必须获取选定的索引并从列表中删除它们,这意味着我不能像上面那样创建我的scatter,而必须使用scatter(allx,ally)。
因此,最重要的是我需要一种方法来删除散点图并重新绘制具有新数据的图表,而不改变imshow的存在。我尝试了很多次,只是其中一次尝试。
 fig = Figure()
 axes = fig.add_subplot(111)
 axes2 = fig.add_subplot(111)
 axes.imshow(map)
 axes2.scatter(allx,ally)
 # and the redraw
 fig.delaxes(axes2)
 axes2 = fig.add_subplot(111)
 axes2.scatter(NewscatterpointsX,NewscatterpointsY,picker=5)
 canvas.draw()

令我惊讶的是,这也取消了我的imshow和图轴 :(。如果有任何实现我的梦想的方法,将不胜感激。安德鲁

1个回答

3
首先,您应该仔细阅读此处的事件文档
您可以附加一个函数,每当鼠标被点击时就会被调用。如果您维护一个艺术家列表(这种情况下为点),这些艺术家可以被选中,那么您可以询问鼠标单击事件是否在艺术家内部,并调用艺术家的remove方法。如果没有,您可以创建一个新的艺术家,并将其添加到可点击点的列表中:
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()

这里输入图片描述

希望这能帮助你实现梦想。 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接