2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Построение графика в реальном времени
Сообщение25.03.2015, 20:32 
Есть непрерывно обновляющийся буферный файл с массивами данных, которые при определенном его заполнении сбрасываются в другой файл, тем самым опустошая этот буферный файл, и дальше всё повторяется. Нужно отрисовывать определенное количество последних данных в реальном времени.

Пока что действовала такая схема, просто отрисовывалось содержимое буферного файла в gnuplot'е:
plot "bufferfile" w l
replot
pause 1
reread

При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек, а когда накапливается сто тысяч точек файл опустошается.

Как подойти к вопросу?

 
 
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 03:31 
Если советов получше не будет, можно написать программу, которая читает этот файл и пишет в другой файл, в котором одно и то же число записей. Она будет помнить уже исчезнувшие из файла точки. Разумно сделать в ней круговой буфер — так проще будет добавлять новые точки, заодно затирая именно те старые, которые больше не нужны. При этом даже не обязательно парсить числа — можно хранить их как строки; так и быстрее будет, если памяти хватает.

 
 
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 08:53 
Adventor в сообщении #995612 писал(а):
Есть непрерывно обновляющийся буферный файл с массивами данных, которые при определенном его заполнении сбрасываются в другой файл, тем самым опустошая этот буферный файл, и дальше всё повторяется. Нужно отрисовывать определенное количество последних данных в реальном времени.

Пока что действовала такая схема, просто отрисовывалось содержимое буферного файла в gnuplot'е:
plot "bufferfile" w l
replot
pause 1
reread

При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек, а когда накапливается файл опустошается.

Как подойти к вопросу?

Переменная l в операторе plot "bufferfile" w l - это, как я понял, длина записи в файле. Задайте её константой, равной сто тысяч (точек).

 
 
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 10:51 
Adventor в сообщении #995612 писал(а):
При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек,

Воспользуйтесь командой вроде plot [0:10] "bufferfile" w l. В квадратных скобках - диапазон значений абсцисс, тогда проблем с меняющимся масштабом не будет. Если добавить вторую пару чисел в отдельных квадратных скобках, будет фиксированный масштаб еще и по ординате.

Adventor в сообщении #995612 писал(а):
а когда накапливается сто тысяч точек файл опустошается.
Тут, пожалуй, лучший вариант - то, что предложил arseniiv.

Skeptic в сообщении #995797 писал(а):
Переменная l в операторе plot "bufferfile" w l - это, как я понял, длина записи в файле.
Нет, это не переменная, а указание, что точки графика нужно соединять линией.

 
 
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 11:43 
arseniiv в сообщении #995758 писал(а):
Если советов получше не будет, можно написать программу, которая читает этот файл и пишет в другой файл, в котором одно и то же число записей. Она будет помнить уже исчезнувшие из файла точки. Разумно сделать в ней круговой буфер — так проще будет добавлять новые точки, заодно затирая именно те старые, которые больше не нужны. При этом даже не обязательно парсить числа — можно хранить их как строки; так и быстрее будет, если памяти хватает.

Вот о таком я уже и задумался, чтобы сделать отдельный файл постоянной длины с обновляемыми точками, который уже отрисовывать в gnuplot. Но как реализовать, придется подумать. Кольцевой буффер это наверно идея.

-- Чт мар 26, 2015 12:48:14 --

Pphantom в сообщении #995834 писал(а):
Adventor в сообщении #995612 писал(а):
При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек,

Воспользуйтесь командой вроде plot [0:10] "bufferfile" w l. В квадратных скобках - диапазон значений абсцисс, тогда проблем с меняющимся масштабом не будет. Если добавить вторую пару чисел в отдельных квадратных скобках, будет фиксированный масштаб еще и по ординате.

Это не работает, поскольку точки только добавляются в буферный файл и не исчезают(с его начала). Таким образом, будет отрисовываться только выбранная интервалом часть файла, а когда точки выйдут за пределы интервала, на графике нового ничего не будет.

 
 
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 12:28 
Adventor в сообщении #995866 писал(а):
Это не работает, поскольку точки только добавляются в буферный файл и не исчезают(с его начала). Таким образом, будет отрисовываться только выбранная интервалом часть файла, а когда точки выйдут за пределы интервала, на графике нового ничего не будет.
Тогда можно написать дополнительный скрипт (или добавить такую функциональность в то, что будет работать с буферным файлом), который будет генерировать команду для gnuplot, корректируя диапазон абсцисс.

 
 
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 14:25 
Adventor в сообщении #995866 писал(а):

Pphantom в сообщении #995834 писал(а):
Adventor в сообщении #995612 писал(а):
При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек,

Воспользуйтесь командой вроде plot [0:10] "bufferfile" w l. В квадратных скобках - диапазон значений абсцисс, тогда проблем с меняющимся масштабом не будет. Если добавить вторую пару чисел в отдельных квадратных скобках, будет фиксированный масштаб еще и по ординате.

Это не работает, поскольку точки только добавляются в буферный файл и не исчезают(с его начала). Таким образом, будет отрисовываться только выбранная интервалом часть файла, а когда точки выйдут за пределы интервала, на графике нового ничего не будет.

Сделайте plot [0:10000] "bufferfile" w l.

 
 
 
 Re: Построение графика в реальном времени
Сообщение27.03.2015, 14:21 
Skeptic в сообщении #995920 писал(а):
Сделайте plot [0:10000] "bufferfile" w l.

Ну говорю же что это не работает. Точки от начала файла не меняются. Только добавлются новые, пока при достижении определенного количества содержимое файла не опустошится.

 
 
 
 Re: Построение графика в реальном времени
Сообщение27.03.2015, 15:05 
Adventor, у вас был вопрос был по масштабу по осям абсцисс. Масштаб сохраняется?

 
 
 
 Re: Построение графика в реальном времени
Сообщение27.03.2015, 22:54 
Аватара пользователя
Для того что-бы ответить на вопрос, его надо задать. А автор этого не сделал.

 
 
 
 Re: Построение графика в реальном времени
Сообщение28.03.2015, 03:09 
Это вы зря — вполне задал.

 
 
 
 Re: Построение графика в реальном времени
Сообщение28.03.2015, 08:21 
Аватара пользователя
Для arseniiv и Adventor,
Читаем как надо задавать вопросы
http://rsdn.ru/info/howtoask.xml

1) Название темы не осмысленно. Если судить по названию проблема со временем. Она что тормозит или слишком быстро выводится или не правильно синхронизируется?
2) Проблема не описана, дано только описание кода. И ответы большинства мне напоминают лечения по фотографии.
3) Описывайте симптомы проблемы, а не свои предположения.
Проблемы с масштабом? Так фиксируйте масштаб и будет вам счастье. Либо плавно меняйте.

 
 
 
 Posted automatically
Сообщение28.03.2015, 17:23 
Аватара пользователя
 i  Тема перемещена из форума «Computer Science» в форум «Околонаучный софт»

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group