2008-10-22 4 views
5

У меня есть файл данных из 3 столбцов, и я хотел использовать splot для построения того же самого. Но то, что я хочу, это то, что gnuplot занимает первую строку (в некотором цвете, например красный), а затем делает паузу в течение 0,3 секунды, а затем переходит к построению следующей строки (в другом цвете, а не в красном, например, зеленым), паузы для 0,3 с, а затем переходит к следующей строке .... так далее n и так далее.Gnuplot: Как построить каждую строку в файле после некоторой паузы

Любая помощь будет очень признательна.

заранее спасибо

С уважением Pankaj

ответ

2

Если вы хотите произвести анимацию, вам лучше использовать специализированные инструменты для него (как MPlayer).

Используйте gnuplot для подготовки всех исходных изображений (сначала один с одной строкой, второй - с двумя строками и т. Д.), Затем используйте mplayer или convert (from imagemagic) для создания AVI или анимированного GIF из исходных файлов.

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

file="your input file.dat" 
lines=$(wc -l $file) 
i=1 
while [ $i -le $lines ] ; do 
    head -${i} ${file} > ${file%.dat}-${i}lines.dat 
done 

Учитывая somefile.dat это будет создавать файлы "1lines.dat-некий-файл", "некий-файл-2lines.dat" и т.д. Затем вы можете использовать:

for f in *lines.dat ; do 
    gnuplot ... $f 
done 

построить их в последовательность.

Если мое предположение неверно, и все, что вам действительно нужно, это пауза, то вы можете попытаться настроить все, чтобы gnuplot получал данные от stdin, а затем использовал этот scipt (имя it paused-input.sh) для трубы входной файл с паузами после каждой строки:

#!/bin/bash 
while read l ; do 
    echo "$l" 
    sleep 1 
done 

Затем вызовите его так:

(pause-input.sh | gnuplot ...) < somefile.dat 
2

Хорошая попытка, но ... Это создаст столько файлов, как количество строк в файле данных , Это выглядит уродливо для меня.

Мы можем написать оболочки/Perl скрипт для создания GNUPLOT скрипт с командами в нем нравится:

splot x1 y1 z1 
pause 1 
replot x2 y2 z2 
pause 1 
replot x3 y3 z3 
pause 1 
replot x4 y4 z4 

где хи уи Zi = координаты в файле данных для числа ой строки. пауза 1 остановит его на одну секунду.

Это всего лишь идея, хотя я не уверен, как напрямую строить координаты, а не поставлять файл данных в gnuplot.

0

сделать файл печати, например. 'Myplotfile.plt. и поместите в него все команды, которые вы обычно набираете в gnuplot для построения графиков.

затем просто добавьте строку

!sleep $Number_of_Seconds_to_Pause

в файл участка, где вы хотите, чтобы сделать паузу, и запустить его из терминала с

gnuplot myplotfile.plt

(расширение plotfile не вопрос, если вы находитесь в окне или mac box, вы можете использовать .txt)

пример файла участка:

set title 'x squared' 
plot x**2 title '' 
!sleep 5 
set title 'x cubed' 
plot x**3 title '' 
!sleep 5
1

Чтобы получить эффект от рисования каждой строки по одному (с небольшой паузой между ними), возможно, проще с текущей версией gnuplot (прошло более 4 лет с момента публикации этого вопроса).

Вы можете использовать for -loop, и every ключевое слово, например:

# Find out the number of lines in the data somehow, 
# for example like this: 
num_lines="`cat my_datafile.d | wc -l`" 

# Plot the first line in the data-file: 
plot './my_datafile.d' every 1::0::0 

# For the remaining lines: 
do for [line_index = 1:num_lines-1] { 
    pause 0.3 
    # Replot (from the same datafile) each line 
    # in the data file from the first one up to 
    # the current line_index 
    replot '' every 1::0::line_index 
} 

every 1::0::line_index часть инструктирует Gnuplot - в каждом цикле - рисовать каждую линию (1) в данные от первого (0) до текущего значения переменной цикла line_index. То, что мы используем это <point_incr>, <start_point> и <end_point>, упомянутые в тексте справки GNUPLOT в:

gnuplot> help every 
The `every` keyword allows a periodic sampling of a data set to be plotted. 
[...] 

Syntax: 
    plot 'file' every {<point_incr>} 
         {:{<block_incr>} 
         {:{<start_point>} 
          {:{<start_block>} 
          {:{<end_point>} 
           {:<end_block>}}}}} 
[...] 

Информация о версии:

$ gnuplot --version 
gnuplot 4.6 patchlevel 0 
Смежные вопросы