Matplotlib создает анимированный график в реальном времени

Мне сложно настроить мой код, чтобы создать анимированный график в реальном времени, мой код графически после сбора данных, не показывающий каждую итерацию. Мой скрипт запускает функцию регрессии, а затем сохраняет в файле, затем я обращаюсь к файлам и рисую их, вот что у меня есть, что мне нужно для перемещения или изменения, чтобы он отображал график в реальном времени? Я попытался переместить функции сюжета внутри цикла for но это не сработало, никаких предложений?

  fig = plt.figure() ax1 = fig.add_subplot(1,1,1) num = 10 for idx in range(1,num): c,e = Regr_magic() with open("CK_output.txt",'a') as CK: CK.write("{0},{1}\n".format(idx,c)) with open("error_output.txt",'a') as E: E.write("{0},{1}\n".format(idx,e)) def animate(i): pull = open('error_output.txt','r').read() data = pull.split('\n') xar = [] yar = [] for each in data: if len(each)>1: x,y = each.split(',') xar.append(float(x)) yar.append(float(y)) ax1.plot(xar, yar) ani = animation.FuncAnimation(fig, animate, interval=1000) plt.show() с  fig = plt.figure() ax1 = fig.add_subplot(1,1,1) num = 10 for idx in range(1,num): c,e = Regr_magic() with open("CK_output.txt",'a') as CK: CK.write("{0},{1}\n".format(idx,c)) with open("error_output.txt",'a') as E: E.write("{0},{1}\n".format(idx,e)) def animate(i): pull = open('error_output.txt','r').read() data = pull.split('\n') xar = [] yar = [] for each in data: if len(each)>1: x,y = each.split(',') xar.append(float(x)) yar.append(float(y)) ax1.plot(xar, yar) ani = animation.FuncAnimation(fig, animate, interval=1000) plt.show() с  fig = plt.figure() ax1 = fig.add_subplot(1,1,1) num = 10 for idx in range(1,num): c,e = Regr_magic() with open("CK_output.txt",'a') as CK: CK.write("{0},{1}\n".format(idx,c)) with open("error_output.txt",'a') as E: E.write("{0},{1}\n".format(idx,e)) def animate(i): pull = open('error_output.txt','r').read() data = pull.split('\n') xar = [] yar = [] for each in data: if len(each)>1: x,y = each.split(',') xar.append(float(x)) yar.append(float(y)) ax1.plot(xar, yar) ani = animation.FuncAnimation(fig, animate, interval=1000) plt.show() 

FYI, файлы данных содержат следующее: число итераций и значение Ck или ошибку, поэтому они выглядят следующим образом:

 1,.0554 2,.0422 3,.0553 4,.0742 5,.0232 

  • Первый набор данных (разброса) графика остается на графике во время анимации с помощью matplotlib Python
  • Цвет фона легенды matplotlib
  • Изменение цвета скрипки скрипки matplotlib
  • Matplotlib: Как отрегулировать ширину линии в colorbar для контурного графика?
  • matplotlib: как уменьшить плотность меток в подзаголовках?
  • Python сохраняет фигуру matplotlib на объекте PIL Image
  • Создание графиков matplotlib без запуска X-сервера
  • Вставить изображение в легенду matplotlib
  • One Solution collect form web for “Matplotlib создает анимированный график в реальном времени”

    Решение для предварительно вычисленных результатов

    Это делает приличную анимацию из данных в вашем выходном файле:

     from matplotlib import pyplot as plt from matplotlib import animation fig = plt.figure() with open('error_output.txt') as fobj: x, y = zip(*([float(x) for x in line.split(',')] for line in fobj)) def animate(n): line, = plt.plot(x[:n], y[:n], color='g') return line, anim = animation.FuncAnimation(fig, animate, frames=len(x), interval=1000) plt.show() 

    Решение для анимации в реальном времени при вычислении значений

    Здесь версия, которая позволяет анимацию данных в реальном времени производить regr_magic :

     import random import time from matplotlib import pyplot as plt from matplotlib import animation class RegrMagic(object): """Mock for function Regr_magic() """ def __init__(self): self.x = 0 def __call__(self): time.sleep(random.random()) self.x += 1 return self.x, random.random() regr_magic = RegrMagic() def frames(): while True: yield regr_magic() fig = plt.figure() x = [] y = [] def animate(args): x.append(args[0]) y.append(args[1]) return plt.plot(x, y, color='g') anim = animation.FuncAnimation(fig, animate, frames=frames, interval=1000) plt.show() 

    Класс RegrMagic является помощником, который издевается над Regr_magic() . Метод __call__ делает экземпляр этого класса как функцию. Он имеет состояние и производит номера 1, 0.56565 , 2, 0.65566 и т. Д. Для каждого вызова (второе число – случайное число). Он также имеет временную задержку для имитации времени вычисления.

    Важная вещь – frames() . Замените Regr_magic() на Regr_magic() и должно быть хорошо.

    Решение конкретной проблемы

    Версия без издевок:

     import random import time from matplotlib import pyplot as plt from matplotlib import animation def frames(): while True: yield Regr_magic() fig = plt.figure() x = [] y = [] def animate(args): x.append(args[0]) y.append(args[1]) return plt.plot(x, y, color='g') anim = animation.FuncAnimation(fig, animate, frames=frames, interval=1000) plt.show() 
    Python - лучший язык программирования в мире.