2017-01-05 3 views
1

Мне нужно читать числа из файла «file.txt» в реальном времени (другая программа сохраняет пару чисел в ней и перезаписывает их каждые 1/10 сек). Следующий скрипт может отображать числа, но только пару, которая читается при запуске сюжета. Я пробовал с plt.ion(), но в этом случае он ничего не делает. Я хочу читать каждый раз, когда обновляется «file.txt».Python live plot с методом «plotfile»

код я использую:

import matplotlib.pyplot as plt 

plot.plotfile('file.txt', delimiter=' ', cols=(1, 0), 
       names=('Volume', 'Tempo'), marker='o') 
plt.show() 

В случае живой сюжет не может быть сделано с помощью метода «plotfile», как я могу это сделать? (Я пробовал методы CSV и другие StackOverflow решение, но чтение файла не может каждый раз)

благодаря

+0

Вы мертвы, если используете статический файл в качестве метода передачи данных между программами? Он полагается на записи hdd, которые могут быть непредсказуемыми из-за кэширования и просто изначально медленны. Кроме того, он не дает возможности сообщить программе построения графика, когда новые данные готовы. – Aaron

+0

также обратите внимание ... '.ion()' не имеет ничего общего с перечитанием файла и обновлением данных. Вам придется сделайте это вручную – Aaron

+0

Вы должны использовать [анимацию Matplotlib] (http://matplotlib.org/1.4.1/examples/animation/index.html) –

ответ

0

Что вам нужно сделать, это создать какой-нибудь способ, чтобы автоматически перебирает файл для чтения и работа графика рисунок. Это может быть выполнено с помощью цикла for, но мой предпочтительный метод, вероятно, будет включать matplotlib.animation.FuncAnimation(). Для вашего случая 10 кадров в секунду, вероятно, недостаточно быстро, вам придется беспокоиться о бьющих, но это хорошая практика и поможет вам получить намного лучшую скорость из MPL. Предоставленный example для FuncAnimation() использует blitting, только вызывая исполнителя для строки, которую нужно нарисовать, чтобы обновить данные y. Если вы используете plt.plotfile(), то, вероятно, будет намного сложнее просто обновить художника и получить его правильно, поэтому я бы рекомендовал прочитать данные самостоятельно и позвонить artists = plt.plot() (или тому подобное). Это позволяет вам просто обновлять данные художника линии, не перерисовывая весь график: lineartist.set_ydata(dataReadFromFile)

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

  • Нет связанных вопросов^_^