Python-matplotlib живое графическое отображение без перемещения графика (прокрутка)

В настоящее время я работаю над приложением Python, которое я начал писать с нуля. Что уже есть:

  1. Поток, выполняющийся в фоновом режиме, собирает данные с сервера и записывает их в файл.
  2. В основном потоке я открыл графический интерфейс matplotlib graph, который отображает данные из этого файла, которые я упомянул в пункте 1.

Так что все прекрасно и работает в соответствии с тем, что я объяснил выше. Но когда matplotlib рисует живые данные, график динамически перемещается, когда новые точки добавляются к внутреннему файлу, к которому он относится. Я не уверен, что здесь я хорошо выразил свою проблему. Я хочу сказать, что при обновлении живого графика экран графика буквально перемещается вперед (слева направо), а старый график (старые точки) становится невидимым (по мере перемещения экрана) и теряется. Если я попробую прокрутить влево (используя инструмент прокрутки, заданный средним инструментом matplotlib по умолчанию), тогда просто пробел. Я хочу:

  1. Экран не должен двигаться.
  2. Старые точки должны быть видны без прокрутки влево.
  3. Следует добавлять только новые точки, а старые точки не должны очищаться или перемещаться (скрываться).

Вот мой код:

#import modules import Tkinter as tk import MasterWindow import matplotlib.pyplot as plt import matplotlib.animation as animation from threading import Thread from datetime import * import matplotlib.dates as dates from fabfile import connect import time from fabric.api import env LARGE_FONT= ("Verdana", 12) env.host_string = '[email protected]' env.password = "nms" class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self,parent) label = tk.Label(self, text="Graphy-Home", font=LARGE_FONT) label.pack(pady=10,padx=10) Command = tk.Label(self, text="Enter Command") pickCommand = tk.Entry(self) pickCommand.pack(pady=10) Command.pack() button1 = tk.Button(self, text="Submit Command", command=lambda: submit()) button1.pack() fig = plt.figure() ax1 = fig.add_subplot(1,1,1) def submit(): t1=Thread(target=FileWriter) t1.start() ani = animation.FuncAnimation(fig, animate, interval=1000) plt.show() print("done") def FileWriter(): f=open('F:\\home\\WorkSpace\\FIrstPyProject\\TestModules\\sampleText.txt','w',0) k=0 cmd=pickCommand.get() while (k < 40): print("inside while") p=connect(cmd) f.write(p.stdout) f.write('\n') print("wrote data") k += 1 def animate(i): print("inside animate") pullData = open("sampleText.txt","r").read() dataArray = pullData.split('\n') xar = [] yar = [] for eachLine in dataArray: if len(eachLine)>1: x,y = eachLine.split(',') timeX=datetime.strptime(x, "%H:%M:%S") xar.append(timeX.strftime("%H:%M:%S")) yar.append(float(y)) #ax1.plot(timeStamps,yar) plt.plot_date(dates.datestr2num(xar), yar,'b-') class PageOne(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) label = tk.Label(self, text="Page One!!!", font=LARGE_FONT) label.pack(pady=10,padx=10) button1 = tk.Button(self, text="Back to Home", command=lambda: controller.show_frame(StartPage)) button1.pack() button2 = tk.Button(self, text="Page Two", command=lambda: controller.show_frame(PageTwo)) button2.pack() class PageTwo(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) label = tk.Label(self, text="Page Two!!!", font=LARGE_FONT) label.pack(pady=10,padx=10) button1 = tk.Button(self, text="Back to Home", command=lambda: controller.show_frame(StartPage)) button1.pack() button2 = tk.Button(self, text="Page One", command=lambda: controller.show_frame(PageOne)) button2.pack() app = MasterWindow.MasterWindow(StartPage, PageOne, PageTwo) app.mainloop() 

Просто для того, чтобы дать хедз-ап, функция анимации – это работа, выполняемая в основном цикле, и функция FileWriter запускается в отдельном потоке для сбора данных.

Надеюсь, моя проблема объясняется так, как это можно понять! Если что-то неясно, пожалуйста, дайте мне знать.