Python绘图问题2

2024-06-01 07:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,这里是第2轮感谢大家对前一个问题的帮助,但我很不幸回到了我开始的地方。所有这些都发生在我试图给这个图添加一条线的时候。传入的数据是来自另一个程序的列表。为了测试的目的,我让另一个程序输出[100110]。一条线我要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'

以下是传入数据的代码以及发生错误的位置。在

^{pr2}$

谢谢你们的帮助!在


Tags: 数据self程序dataplot错误npusers
2条回答

根据你的评论:

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返回它生成的line对象的列表。既然你看起来是在画一条直线,那么就要确保你看到的是列表的第一个(也是唯一一个)元素。在

或者

^{pr2}$

或者

self.plot_data[0].set_xdata(np.arange(len(self.data[0])))

它看起来像您定义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)的文档:

^{pr2}$

这是课堂上的:

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] )

希望有帮助!我引用了:

update matplotlib plot

http://matplotlib.org/api/axes_api.htmlhttp://matplotlib.org/api/artist_api.html#matplotlib.lines.Line2D.set_xdata

相关问题 更多 >