2015-11-09 2 views
6

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

  1. Нить, выполняющаяся в фоновом режиме, собирает данные с сервера и записывает их в файл.
  2. В главном потоке я открывший Matplotlib GUI график, который Участки под Застройку живых данных из этого файла, который я упоминал в пункте 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 работает в отдельном потоке для сбора данных.

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

+0

не так, поскольку она автоматически весы после каждого шага черчения? Не будет 'plt.set_xlim (min, max)' после 'plt.plot_date()' исправить вашу проблему? Не могли бы вы предоставить фрагмент кода, чтобы мы могли легко воспроизвести ваш сюжет? – jrjc

+0

Вместо 'while (k <40)', а затем увеличивая 'k', просто напишите' для k в диапазоне (40) '. –

+0

@jeanrjc - я предоставил вам весь код в своем вопросе –

ответ

0

Не уверен, так как я не могу запустить ваш код. Но я предлагаю попробовать добавить

ax1.axis([xmin, xmax, ymin, ymax]) 

после

fig = plt.figure() 
    ax1 = fig.add_subplot(1,1,1) 
+0

привет Цици, извините за то, что вы вернулись к вам этим поздно, но я думаю, что m не объясняет это здесь. Могу ли я объяснить это вам по голосу в скайпе? если вы готовы посещать PLS –

Смежные вопросы