2008-10-22 10 views
5

Mam plik danych z 3 kolumnami i chciałem użyć splotu do wykreślenia tego samego. Ale ja chcę, żeby gnuplot działał w pierwszym rzędzie (w pewnym kolorze, powiedzmy na czerwono), a następnie pauzuje, powiedzmy 0,3 s, a następnie przesuwa się do kreślenia następnego wiersza (w innym kolorze, nie na czerwono, powiedzmy na zielono), pauzy dla 0,3 s, a następnie przechodzi do następnego rzędu .... więc n tak dalej.Gnuplot: Jak wykreślić każdą linię w pliku po pewnym pauzie

Każda pomoc będzie bardzo ceniona.

góry dzięki

Pozdrowienia Pankaj

Odpowiedz

2

Jeśli chcesz stworzenia animacji, lepiej użyć specjalistycznych narzędzi dla niego (jak MPlayer).

Użyj gnuplot, aby przygotować wszystkie obrazy źródłowe (pierwszy z pojedynczym rzędem, drugi z dwoma liniami itd.), A następnie użyj mplayera lub konwertuj (z imagemagic), aby utworzyć avi lub animowany GIF z plików źródłowych.

Możesz użyć poniższego fragmentu powłoki, aby utworzyć częściowe kopie pliku wejściowego, z których każdy ma zwiększoną liczbę wierszy.

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 

Biorąc somefile.dat będzie produkować pliki "somefile-1lines.dat", "somefile-2lines.dat" itd Następnie można użyć:

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

wykreślić je wszystkie sekwencja.

Jeśli moje założenie jest błędne i wszystko, czego naprawdę chcesz, to ta pauza, możesz spróbować ustawić rzeczy tak, aby gnuplot pobierał dane ze standardowego wejścia, a następnie używał tego sciptu (nazwa to paused-input.sh) do rura plik wejściowy z przerwami po każdym wierszu:

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

Następnie wywołać ją tak:

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

Dobra próba, ale ... to stworzy tyle plików, jak liczba wierszy w pliku danych . To wygląda dla mnie brzydko.

Możemy napisać skrypt powłoki/perla do tworzenia skryptu Gnuplot z poleceń w nim podoba:

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

gdzie xi, yi, zi = współrzędne w pliku danych dla linii numer ego. pauza 1 spowoduje zatrzymanie go na jedną sekundę.

To tylko pomysł, ale nie jestem pewien, jak wykreślić współrzędne bezpośrednio, zamiast dostarczać plik danych do gnuplot.

0

utworzyć plik plot, np. "myplotfile.plt". i umieść w nim wszystkie polecenia, które normalnie wpisujesz w gnuplot, aby narysować swoje wykresy.

potem po prostu dodać linię

!sleep $Number_of_Seconds_to_Pause

do pliku działce gdzie chcesz go wstrzymać, i uruchomić go z terminala z

gnuplot myplotfile.plt

(rozszerzenie plotfile nie ważne, jeśli jesteś w oknie Windows lub Mac Box, możesz użyć .txt)

przykład pliku fabularnego:

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

Aby uzyskać efekt rysowania każdą linię jedną naraz (z małą przerwą pomiędzy nimi) jest chyba łatwiej z aktualną wersją gnuplot (to już ponad 4 lata, ponieważ kwestia ta została wysłana).

Można użyć for -loop i słowa kluczowego every, tak:

# 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 część instruuje gnuplot - w każdej pętli - wyciągnąć każdy wiersz (1) w dane z pierwszego (0) do aktualnej wartości zmiennej pętli line_index. Co używamy jest <point_incr>, <start_point> i <end_point> mowa w Gnuplot pomagają tekście:

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>}}}}} 
[...] 

informacji Wersja:

$ gnuplot --version 
gnuplot 4.6 patchlevel 0 
Powiązane problemy