Python 无法删除/更新Pyplot中的箭头批注

Python 无法删除/更新Pyplot中的箭头批注,python,matplotlib,Python,Matplotlib,我已经尝试实现了我能找到的关于删除或更新箭头/注释/补丁的所有功能,但似乎没有任何效果 以下是代码的重要部分: for i in xrange(lim): if 'arrowprops' in kwargs: kwap = kwargs.pop('arrowprops') ap = {'patchA':text} # Ensure arrow is clipped by the text ap.update(kwap) # Add arr

我已经尝试实现了我能找到的关于删除或更新箭头/注释/补丁的所有功能,但似乎没有任何效果

以下是代码的重要部分:

for i in xrange(lim):

    if 'arrowprops' in kwargs:
        kwap = kwargs.pop('arrowprops')
        ap = {'patchA':text} # Ensure arrow is clipped by the text
        ap.update(kwap) # Add arrowprops from kwargs

    bboxes = get_bboxes(texts, r, (1, 1), ax) #Will give error if you didn't put arrows
    for j, (bbox, text) in enumerate(zip(bboxes, texts)):
        drawArrow = ax.annotate("", # Add an arrow from the text to the point
                xy = (orig_xy[j]),
                xytext=get_midpoint(bbox),
                arrowprops=ap,
                *args, **kwargs) 

    drawArrow.remove() #removed arrows otherwise old arrows remain
    plt.draw()
这是从这里开始的第524行到第645行

每次进入循环时,箭头端点的位置都不同,但只绘制一个新箭头而不删除旧箭头,因此图像如下所示

我发现.remove()是删除注释的正确方法,它在再次绘制绘图之前不会更新,所以我将plt.draw()放在这里


这很难调试/测试/隔离,因为我正试图修改它的python包。但也许我可以尝试并实施一些其他的解决办法

你确定索引是正确的吗?如果要删除每个箭头,
drawArrow.remove()
必须位于循环内部。否则,只删除最后一个。因此
drawArrow.remove()
需要位于enumerate(zip(bboxes,text))中j(bbox,text)的
内:
循环,否则它将只删除该循环中的最后一个箭头?在这种情况下,是否有其他方法移除箭头?我的第一个想法是让drawArrow成为一个数组,即
drawArrow[i]
,但这可能不是计算效率最高的解决方案,尤其是在较大的数字上。我不清楚您试图实现什么,但可以肯定的是,添加箭头并在以后删除箭头是非常低效的。相比之下,将对象存储在per的列表中一点效率都不低。我试图修改的包是一个用于移动文本注释的包,这样它们就不会重叠,箭头从数据点指向文本。这是一个迭代过程,因此在每个步骤中,文本位置和从文本到点的箭头都会发生变化。之前,在每个中间步骤都有保存绘图的选项,但不包括箭头。我试图在每个保存的绘图中包含箭头,但包含箭头会导致绘图保存所有步骤中的所有箭头,因此我希望只包含特定步骤中的箭头。我建议您在使用
adjustText
的地方生成一个代码的示例,其中显示了问题。这将使问题更容易定位。