我有一个渲染matplot数字的init函数:
self.fig = plt.figure()
self.ax = self.fig.add_subplot(111)
self.line_1, = self.ax.plot([], [], 'r-')
g = FigureCanvasTkAgg(self.fig, master=self.ui)
我在同一个类中有另一个函数,它应该用新点更新图形:
count = 0
def update(self, data):
self.count +=1
self.line_1.set_ydata(data)
self.line_1.set_xdata(self.count)
self.fig.canvas.draw()
虽然空图显示,当我在其他地方调用更新函数时(数据是浮点值,如0.643),根本没有任何事情发生。
我希望尽可能简单地实现这一目标 - 正如您可能知道的那样!欢呼声。
答案 0 :(得分:1)
您正在将xdata设置为单个数字,这可能不是您想要的。你可以尝试改为
self.line_1.set_xdata(range(len(data)))
假设您希望针对其索引绘制给定列表data
。
另一个问题是轴的限制没有更新,所以可能你的数据不会出现。您可以通过在更新数据和重绘之间调用ax.relim()
和ax.autoscale_view()
来解决此问题:
def update(self, data):
self.line_1.set_ydata(data)
self.line_1.set_xdata(range(len(data)))
self.ax.relim()
self.ax.autoscale_view()
self.fig.canvas.draw()
事实上,它似乎基于您对count
的使用以及您对数据为浮点值的评论,您希望使用此方法一次添加单个值。当您调用line_1.set_ydata()
时,您没有附加值 - 您将使用给定值替换整个ydata,顾名思义!要附加值,请执行以下操作:
def append(self, val):
ydata = self.line_1.get_ydata()
ydata = np.append(ydata, val)
self.line_1.set_ydata(ydata)
self.line_1.set_xdata(range(len(ydata)))
self.ax.relim()
self.ax.autoscale_view()
self.fig.canvas.draw()
(假设你事先有import numpy as np
。)