繁体   English   中英

Matplotlib无法识别属性set_xdata。

[英]Matplotlib is not recognizing the attribute set_xdata.

在参考这篇文章时 :我一直在尝试运行以下代码来绘制图表并实时更新图表。 但是,每次尝试运行该函数时,我都会受到以下错误的欢迎: AttributeError: 'list' object has no attribute 'set_xdata'

该函数的其余部分如下所示:

def getData(self):
    self.data = random.gauss(10,0.1)
    self.ValueTotal.append(self.data)
    #With value total being a list instantiated as ValueTotal = []
    self.updateData()

def updateData(self):

    if not hasattr(self, 'line'):
        # this should only be executed on the first call to updateData
        self.widget.canvas.ax.clear()
        self.widget.canvas.ax.hold(True)
        self.line = self.widget.canvas.ax.plot(self.ValueTotal,'r-')
        self.widget.canvas.ax.grid()
    else:
        # now we only modify the plotted line
        self.line.set_xdata(np.arange(len(self.ValueTotal)))
        self.line.set_ydata(self.ValueTotal)

    self.widget.canvas.draw()   

虽然这段代码来自塞巴斯蒂安杰克法语,但我没有成功实现这一点。我有什么问题吗? 什么产生了这个错误,我该如何解决?

这仅用于示例,不会复制到我的代码中。 我只是将它用作参考资料,并认为这是与社区沟通问题的最简单方法。 我不赞成以前的代码。

正如Joe Kington指出的那样:情节会返回您想要第一个元素的艺术家列表:

self.line = self.widget.canvas.ax.plot(self.ValueTotal,'r-')[0]

所以,取第一个列表元素,即实际行。

复制此行为的最小示例:

l = plt.plot(range(3))[0]
l.set_xdata(range(3, 6))

l = plt.plot(range(3))
l.set_xdata(range(3, 6))

第一个运行正常,第二个运行AttributeError。

这样做的成语是:

x = np.arange(0,10,0.1)
l, = plt.plot(x,x*x)
l.set_xdata(range(3, 6))

它采用Line2D列表的第一个元素,它允许使用set_xdata()set_ydata()操作整个坐标列表。

请注意,这不起作用:

x = np.arange(0,10,0.1)
l,_ = plt.plot(x,x*x)
l.set_xdata(range(3, 6))

(用line, =看到成语line, =在许多代码示例中,我曾经认为plot()返回一对值,这不是真的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM