在我的情况下,我想在点击重置按钮时删除其中一个圆圈。但是,ax.clear()会清除当前数字上的所有圆圈。
有人可以告诉我如何只删除部分补丁吗?
import matplotlib.patches as patches
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
fig = plt.figure()
ax = fig.add_subplot(111)
circle1 = patches.Circle((0.3, 0.3), 0.03, fc='r', alpha=0.5)
circle2 = patches.Circle((0.4, 0.3), 0.03, fc='r', alpha=0.5)
button = Button(plt.axes([0.8, 0.025, 0.1, 0.04]), 'Reset', color='g', hovercolor='0.975')
ax.add_patch(circle1)
ax.add_patch(circle2)
def reset(event):
'''what to do here'''
ax.clear()
button.on_clicked(reset)
plt.show()
答案 0 :(得分:15)
试试这个:
def reset(event):
circle1.remove()
也许你更喜欢:
def reset(event):
circle1.set_visible(False)
答案 1 :(得分:2)
不同的选择是这个
ax.patches = []
它将删除所有补丁。
答案 2 :(得分:0)
我也尝试了答案 1,虽然它在这种情况下有效,但在我自己的代码中无效。有效的是在将补丁添加到轴后删除补丁对象,而不是原始补丁对象,如下所示:
circle1 = patches.Circle((0.3, 0.3), 0.03, fc='r', alpha=0.5)
circle2 = patches.Circle((0.4, 0.3), 0.03, fc='r', alpha=0.5)
button = Button(plt.axes([0.8, 0.025, 0.1, 0.04]), 'Reset', color='g', hovercolor='0.975')
c1=ax.add_patch(circle1)
c2=ax.add_patch(circle2)
def reset(event):
c1.remove()
button.on_clicked(functools.partial(reset,patch=c1))
plt.show()
否则我会收到 NotImplementedError('cannot remove Artist') 错误。