为什么我的数字不会显示更新的情节?

时间:2016-12-15 19:59:40

标签: python matplotlib tkinter

我有一个渲染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),根本没有任何事情发生。

我希望尽可能简单地实现这一目标 - 正如您可能知道的那样!欢呼声。

1 个答案:

答案 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。)