作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 imshow( map )上有一个散点图。我想要一个点击事件来添加一个新的散点,我已经通过 scater(newx,newy)) 完成了。问题是,然后我想添加使用拾取事件删除点的功能。由于没有 remove(pickX,PickY) 函数,我必须获取选择的索引并将它们从列表中删除,这意味着我不能像上面那样创建我的散点图,我必须使用 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 和轴 :(。非常感谢任何实现我梦想的方法。安德鲁
最佳答案
首先,您应该好好阅读 events docs here .
您可以附加一个函数,只要单击鼠标就会调用该函数。如果您维护一个可以拾取的艺术家列表(在本例中为点),那么您可以询问鼠标单击事件是否在艺术家内部,并调用艺术家的 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()
希望这能帮助你实现你的梦想。 :-)
关于matplotlib:重绘前清除散点数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11918910/
我是一名优秀的程序员,十分优秀!