![](/img/trans.png)
[英]AxesSubplot' object has no attribute 'get_xdata' error when plotting OHLC matplotlib chart
[英]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.