无法实现for循环从matplotlib图中删除艺术家对象

时间:2015-02-14 01:57:30

标签: python matplotlib

我有两个版本的代码来添加/删除matplotlib图中的艺术家对象。第一个工作正常。我想通过将代码压缩为for循环来清理代码但是当我这样做时它不再正常工作。我想知道是否有一些简单的东西我可能会在这里失踪。

非循环版本(有效):

 def on_motion(self,event):
      if self.cback == 1:
            print "Motion Registered"
            self.xf, self.yf = event.xdata, event.ydata
            if isinstance(self.axline, lines.Line2D):
                self.ax.lines.remove(self.axline)
                self.ax.lines.remove(self.bxline)
                self.ax.lines.remove(self.ayline)
                self.ax.lines.remove(self.byline)
                self.canvas.draw()

            self.pts = []
            self.axline = lines.Line2D([self.xi, self.xf], [self.yf, self.yf])
            self.bxline = lines.Line2D([self.xi, self.xf], [self.yi, self.yi])
            self.ayline = lines.Line2D([self.xi, self.xi], [self.yi, self.yf])
            self.byline = lines.Line2D([self.xf, self.xf], [self.yi, self.yf])
            self.ax.add_line(self.axline)
            self.ax.add_line(self.bxline)
            self.ax.add_line(self.ayline)
            self.ax.add_line(self.byline)
            self.canvas.draw()

这是带有for循环的版本,但不起作用。当我运行此版本时,我会得到一个ValueError: list.remove(x): x not in list,当self.ax.lines.remove(self.line[j])行执行时会发生def on_motion(self,event): if self.cback == 1: print "Motion Registered" self.xf, self.yf = event.xdata, event.ydata if len(self.line) > 0 and isinstance(self.line[0], lines.Line2D): for j in xrange(len(self.line)): self.ax.lines.remove(self.line[j]) self.canvas.draw() pt_matrix = [[self.xi, self.xf, self.yf, self.yf], [self.xi, self.xf, self.yi, self.yi], [self.xi, self.xi, self.yi, self.yf], [self.xf, self.xf, self.yi, self.yf]] linenew = [] for i in xrange(4): linenew = lines.Line2D([pt_matrix[i][0], pt_matrix[i][1]], [pt_matrix[i][2], pt_matrix[i][3]]) self.line.append(linenew) self.ax.add_line(self.line[i]) self.canvas.draw() 。奇怪的是,这个版本在暂停之前似乎适用于一些鼠标移动:

{{1}}

0 个答案:

没有答案