我无法想象如何使用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)
这样可行,但不会绘制任何内容。不过,情节会自行调整大小。
答案 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.lastval
到numpy.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))
这样,您不必自己做任何簿记。
找到更多详情