好的第2回合感谢大家帮助解决上一个问题,但我回到了不幸的开始。当我尝试在此图表中添加一行时,所有这些都发生了。传入的数据是来自另一个程序的列表。出于测试目的,我有另一个程序吐出[100,110]。我希望100行为一行,110行为另一行。最终这将是来自Arduino的传入数据,这将是实时数据。我一直收到这个错误。
AttributeError Traceback (most recent call last)
/Users/Tyler/Desktop/Arduino/Graphing_22.py in on_redraw_timer(self, event)
284 #self.data.extend(self.datagen.next())
285
--> 286 self.draw_plot()
287
288 def on_exit(self, event):
/Users/Tyler/Desktop/Arduino/Graphing_22.py in draw_plot(self)
240 visible=self.cb_xlab.IsChecked())
241
--> 242 self.plot_data.set_xdata(np.arange(len(self.data[0])))
243 #self.plot_data.set_xdata(np.arange([1,1000])
244 self.plot_data.set_ydata(np.array(self.data[1]))
AttributeError: 'list' object has no attribute 'set_xdata'
以下是传入数据的代码以及发生错误的位置。
def __init__(self):
wx.Frame.__init__(self, None, -1, self.title)
self.datagen = DataGen()
self.data = self.datagen.next()
#splitting data at '
#self.data = [self.datagen.next().split(",")
self.paused = False
if self.cb_grid.IsChecked():
self.axes.grid(True, color='gray')
else:
self.axes.grid(False)
# Using setp here is convenient, because get_xticklabels
# returns a list over which one needs to explicitly
# iterate, and setp already handles this.
#
pylab.setp(self.axes.get_xticklabels(),
visible=self.cb_xlab.IsChecked())
self.plot_data.set_xdata(np.arange(len(self.data[0])))
#self.plot_data.set_xdata(np.arange([1,1000])
self.plot_data.set_ydata(np.array(self.data[1]))
self.canvas.draw()
感谢帮助人员!
答案 0 :(得分:0)
根据您的评论中的代码:
self.plot_data = self.axes.plot( self.data[0], linewidth=1, color=(1, 1, 0), )
self.axes.plot( self.data[1], linewidth=1, color=(1, 2, 0), )
您的问题在于plot
返回它生成的行对象列表。由于您似乎只绘制了一条线,因此请确保您正在查看列表的第一个(也是唯一的)元素。
无论
self.plot_data = self.axes.plot( self.data[0], linewidth=1, color=(1, 1, 0), )[0]
或
self.plot_data[0].set_xdata(np.arange(len(self.data[0])))
答案 1 :(得分:-1)
您定义的方式plot_data
会返回一个列表。另外,我不确定axes.plot(*args, **kwargs)
当与一个参数一起使用时,用于任一轴上的数据。我检查了文档,发现了这个:
plot(x, y) # plot x and y using default line style and color
plot(x, y, 'bo') # plot x and y using blue circle markers
plot(y) # plot y using x as index array 0..N-1
plot(y, 'r+') # ditto, but with red plusses
返回值是已添加的行列表。那里有类型错误。以下是set_xdata(x)
的文档:
set_xdata(x)
Set the data np.array for x
ACCEPTS: 1D array
它来自班级:
matplotlib.lines.Line2D(xdata, ydata, linewidth=None, linestyle=None, color=None,
marker=None, markersize=None, markeredgewidth=None, markeredgecolor=None,
markerfacecolor=None, markerfacecoloralt='none', fillstyle='full',
antialiased=None, dash_capstyle=None, solid_capstyle=None, dash_joinstyle=None,
solid_joinstyle=None, pickradius=5, drawstyle=None, markevery=None, **kwargs)
因此,您可以考虑声明self.line = plt.lines.Line2D(self.x_data, self.y_data, linewidth=1, color=(1,1,0) )
之类的内容,您必须使用以下内容:
self.x_data = self.axes.plot( self.data[0] )
self.y_data = self.axes.plot( self.data[1] )
希望它有所帮助!我引用了:
http://matplotlib.org/api/axes_api.html http://matplotlib.org/api/artist_api.html#matplotlib.lines.Line2D.set_xdata