Это простая версия, которая отображает последние 30 точек y (фактически она просто отбрасывает все данные, кроме последних 30 точек, так как кажется, что вам не нужно их хранить), но метки оси x остаютсяна 0-30 навсегда, что, по-видимому, не то, что вы хотите:
def animate(y, x_window):
while(1):
data = random.random()
y.append(data)
if len(y)>x_window:
y = y[-x_window:]
x = range(len(y))
ax.clear()
line, = ax.plot(y)
line.set_ydata(y)
fig.canvas.draw()
fig = plt.figure()
ax = fig.add_subplot(111)
y = []
win = fig.canvas.manager.window
fig.canvas.manager.window.after(100, animate(y,30))
Поэтому я добавляю переменную смещения, чтобы отследить, сколько у вас вырезано, и просто добавлю это число ко всемметки оси x с set_xticklabels:
def animate(y, x_window):
offset = 0
while(1):
data = random.random()
y.append(data)
if len(y)>x_window:
offset += 1
y = y[-x_window:]
x = range(len(y))
ax.clear()
line, = ax.plot(y)
line.set_ydata(y)
ax.set_xticklabels(ax.get_xticks()+offset)
fig.canvas.draw()
fig = plt.figure()
ax = fig.add_subplot(111)
y = []
win = fig.canvas.manager.window
fig.canvas.manager.window.after(100, animate(y,30))
Это работает?