实时更新连续功能

时间:2016-07-27 15:07:59

标签: python matplotlib plot

我无法想象如何使用Matplotlib绘制连续函数。我得到了如何绘制散点图,但我想要一个连续的情节。

这是我的代码:

import matplotlib.pyplot as plt
from matplotlib.pyplot import autoscale
import matplotlib.animation as animation

import numpy


class MyPlot():
    def __init__(self):
        self.index = 0
        self.setup()

    def setup(self):
        plt.ion()
        self.fig, self.ax = plt.subplots()
        self.line = self.ax.plot([],[])
        autoscale()
        plt.show()
    def anim(self, i):
        self.line.set_ydata(i)  # update the data
        return self.line,
    def add(self, val):
        print self.index, val
        self.ax.plot(self.index, val)
        animation.FuncAnimation(self.fig, self.anim, repeat=False)
        plt.pause(0.05)
        #if(self.index >= ntests):
        self.index+=1

if __name__== "__main__":
    import time
    from random import random
    p = MyPlot()

    for i in range(100):
        p.add(random())
        time.sleep(0.5)

这样可行,但不会绘制任何内容。不过,情节会自行调整大小。

2 个答案:

答案 0 :(得分:2)

您只是一次绘制一条带有一个点的线(不存在),因此不显示任何内容。如果您将self.ax.plot替换为self.ax.scatter,则会正确绘制。

如果你真的想要线条,你可以跟踪最后一个索引和值,并绘制一条线,将每一次最后一个索引和值与当前索引和值相连接。

将这两行添加到add()

    self.ax.plot([self.index-1, self.index], [self.lastval, val])
    self.lastval = val

以及在setup()

中初始化self.lastvalnumpy.nan的行

答案 1 :(得分:2)

您实际上可以将值附加到matplotlib中的折线图:

self.line.set_xdata(numpy.append(self.line.get_xdata(), self.index))
self.line.set_ydata(numpy.append(self.line.get_ydata(), val))

这样,您不必自己做任何簿记。

可在https://stackoverflow.com/a/10944967/2988730

找到更多详情