我修改了strip chart example以制作动画移动线。但是每次我移动条形图时,前两个线段都会被重新绘制。如我的屏幕截图所示:
但是,如果我点击图中的“保存”按钮并保存它,那么额外的线段就不存在了。 (注意,这些是两个不同的测试运行,具有不同的随机数据,但在我的屏幕上,当动画运行时,两个额外的段总是存在)
它也不会立即在动画中绘制。前两个部分将绘制,然后它将显示在图上。这些值不在tdata或ydata的数据列表中。这是示例代码:
import numpy as np
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
import matplotlib.animation as animation
class Scope:
def __init__(self, ax, maxt=5, dt=1):
self.ax = ax
self.dt = dt
self.maxt = maxt
self.tdata = []
self.tdata.append(0)
self.ydata = []
self.ydata.append(20)
self.line = Line2D(self.tdata, self.ydata)
self.ax.add_line(self.line)
self.ax.set_ylim(21, 24)
self.ax.set_xlim(0, self.maxt)
def update(self, y):
lastt = self.tdata[-1]
if lastt > self.tdata[0] + self.maxt: # reset the arrays
self.tdata = [self.tdata[-1]]
self.ydata = [self.ydata[-1]]
self.ax.set_xlim(self.tdata[0], self.tdata[0] + self.maxt)
self.ax.figure.canvas.draw()
t = self.tdata[-1] + self.dt
self.tdata.append(t)
self.ydata.append(y)
self.line.set_data(self.tdata, self.ydata)
return self.line,
def fetchPrice():
yield np.random.rand(1) + 23
fig, ax = plt.subplots()
scope = Scope(ax)
ani = animation.FuncAnimation(fig, scope.update, fetchPrice, interval=1000,
blit=True)
plt.show()
如果您对正在发生的事情以及如何解决问题有任何想法,请告诉我。感谢。
答案 0 :(得分:0)
这是由错误的缩进造成的。 Dedent update
中的行(请参阅以下代码中的<----
标记行):
def update(self, y):
lastt = self.tdata[-1]
if lastt > self.tdata[0] + self.maxt: # reset the arrays
self.tdata = [self.tdata[-1]]
self.ydata = [self.ydata[-1]]
self.ax.set_xlim(self.tdata[0], self.tdata[0] + self.maxt)
self.ax.figure.canvas.draw() # <----
t = self.tdata[-1] + self.dt
self.tdata.append(t)
self.ydata.append(y)
self.line.set_data(self.tdata, self.ydata)
return self.line,