Python条形图线段不断出现
我已经修改了,制作了一个动画移动线。但是,每次我移动条形图时,前两条线段都会被重新填充。如我的屏幕截图所示: 然而,如果我点击图形上的“保存”按钮并保存它,那么额外的线段就不存在了。(注意,这是两个不同的测试运行,具有不同的随机数据,但在我的屏幕上,当动画运行时,两个额外的片段始终存在) 它也不会在动画中立即打印。前两段将打印,然后它将显示在打印上。这些值不在tdata或ydata的数据列表中。以下是示例代码:Python条形图线段不断出现,python,animation,matplotlib,Python,Animation,Matplotlib,我已经修改了,制作了一个动画移动线。但是,每次我移动条形图时,前两条线段都会被重新填充。如我的屏幕截图所示: 然而,如果我点击图形上的“保存”按钮并保存它,那么额外的线段就不存在了。(注意,这是两个不同的测试运行,具有不同的随机数据,但在我的屏幕上,当动画运行时,两个额外的片段始终存在) 它也不会在动画中立即打印。前两段将打印,然后它将显示在打印上。这些值不在tdata或ydata的数据列表中。以下是示例代码: import numpy as np from matplotlib.lines
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()
让我知道,如果你有什么想法是怎么回事,以及如何解决它。谢谢。这是由于缩进错误造成的。删除
update
中的行(请参见self.tdata[0]+self.maxt:#重置数组
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()文件#@user6972,根据:如果blit=True
,func
和init\u func
应该返回一个要清除的绘图表。您的代码没有提供init\u func
,似乎matplotlib重用update
方法的第一个返回值来清除框架。@user6972,备选方案1:指定blit=False
也为我解决了问题。@user6972,备选方案2:将附加的init_func=lambda:(scope.line,)
传递到FuncAnimation
也解决了问题。
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,