簡體   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