как обновлять график в Python каждую секунду - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь обновлять данные временных рядов каждую секунду с помощью matplotlib.animation.Это будет использоваться для сбора данных из нескольких каналов.Однако, когда я использую анимацию в функции update (), интервал времени не достигается (функции зацикливаются быстрее).Пожалуйста, помогите мне уточнить, как вызвать функцию обновления более корректно.Спасибо.

  • Большинство примеров показывают вызов update () извне функции.Однако в этом случае обновление нескольких каналов одновременно становится проблемой.

    def update(self,start):
        x = np.random.normal(size=1)
        y = np.random.normal(size=1)
        deneme=self.graphicsView.plot(x,y,pen=None,symbol='+')
        time.sleep(0.2)
        animation.FuncAnimation(self.graphicsView,ui.update(),interval =1000)
    

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Я нашел один метод следующим образом. Кажется, хорошо работает с использованием thrading.Timer. Теперь я пытаюсь убедиться в точности интервалов, проверяя длительность процесса.

    def callfunc(self,val):
         process_delta=time.time()-val
         t=threading.Timer(1-process_delta,Ui_Dialog.update,args=(self,))
         t.daemon=True
         t.start()

    def update(self):
        process_start=time.time()
        value1=[]
        deltatime1=[]
        deltatime1.append(time.time()-start)
        y = np.random.normal(size=1)

        deneme=self.graphicsView.plot(deltatime1,y,pen=None,symbol='+')
        QtCore.QCoreApplication.processEvents()

        self.callfunc(process_start)

     start=time.time()   
     ui.callfunc(0)
0 голосов
/ 08 апреля 2019

Попробуйте это:

from datetime import time
second = datetime.now().strftime("%S")
while True:
    do some things your code should do (no time.sleep in there)
    second_before = datetime.now().strftime("%S")
    if second != second_before:
        second = second_before
        call the function
...