2008-10-22 4 views
5

Ich habe eine 3-Spalte-Datendatei und ich wollte Splot verwenden, um das gleiche zu plotten. Aber was ich will, ist, dass Gnuplot ersten Zeile (in irgendeiner Farbe, sagen rot) und dann etwa 0,3 Sekunden pausiert und dann weiter zur nächsten Zeile (in anderen Farben, nicht in rot, sagen wir grün), pausiert für 0,3 Sekunden und geht dann zur nächsten Zeile .... so weiter und so weiter.Gnuplot: Wie jede Zeile in einer Datei nach ein paar Pause plotten

Jede Hilfe wird sehr geschätzt.

Dank im Voraus

Grüße Pankaj

Antwort

2

Wenn Sie eine Animation produzieren wollen, besser Sie spezialisierte Werkzeuge dafür verwenden (wie MPlayer).

Verwenden Sie gnuplot, um alle Quellbilder vorzubereiten (das erste mit einer einzelnen Zeile, das zweite mit zwei Zeilen usw.), dann mplayer oder convert (from imagemagic), um avi oder animiertes GIF aus Quelldateien zu erzeugen.

Sie können das folgende Shell-Snippet verwenden, um Teilkopien der Eingabedatei mit jeweils ansteigender Zeilenanzahl zu erstellen.

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 diese Gegeben Dateien produzieren "somefile-1lines.dat", "somefile-2lines.dat" usw. Dann können Sie verwenden:

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

sie plotten alle in Sequenz.

Wenn meine Annahme falsch ist und alles, was Sie wirklich wollen, ist diese Pause, dann können Sie versuchen, Dinge einzurichten, so dass gnuplot Daten von stdin erhalten, und dann diesen scipt (nennen Sie es paused-input.sh) zu Rohreingabedatei mit Pausen nach jeder Zeile:

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

Dann ist es wie folgt aufrufen:

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

Guter Versuch, aber ... Dies wird so viele Dateien wie die Anzahl der Zeilen in der Datendatei erstellen . Das sieht hässlich für mich aus.

Wir können eine Shell/Perl-Skript schreiben, um gnuplot Skript mit Befehlen in Kriterien zu erstellen:

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

wo xi, yi, zi = Koordinaten in Datendatei für i-te Zeilennummer. Pause 1 wird für eine Sekunde angehalten.

Dies ist nur eine Idee, obwohl ich nicht sicher bin, wie man Koordinaten direkt grafisch darstellt, anstatt gnuplot eine Datendatei zu liefern.

0

eine Plotdatei erstellen z. "Meineplotdatei.plt". und fügen Sie alle Befehle ein, die Sie normalerweise in gnuplot eingeben würden, um Ihre Graphen zu zeichnen.

dann fügen Sie einfach die Linie

!sleep $Number_of_Seconds_to_Pause

auf Ihre Plotdatei, wo Sie es, zu unterbrechen wollen und es vom Terminal laufen mit

gnuplot myplotfile.plt

(die Verlängerung der Plotdatei nicht Angelegenheit, wenn Sie auf einem Windows- oder mac-Box sind vielleicht Sie .txt verwenden)

Beispiel Plotdatei:

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

Um den Effekt der Zeichnung jeder Zeile eins nach dem anderen (mit einer kleinen Pause dazwischen) ist vielleicht einfacher mit der aktuellen Version von gnuplot (es ist über 4 Jahre seit dieser Frage wurde veröffentlicht).

können Sie verwenden eine for -Schleife und die every Schlüsselwort, wie folgt aus:

# 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 
} 

Der every 1::0::line_index Teil anweist gnuplot - in jeder Schleife - jede einzelne Linie zu ziehen (die 1) in die Daten von der ersten (0) bis zum aktuellen Wert der Schleifenvariablen line_index. Was wir verwenden, ist die <point_incr>, <start_point> und <end_point> zu Hilfetext in gnuplot des genannten:

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

Version Info:

$ gnuplot --version 
gnuplot 4.6 patchlevel 0 
Verwandte Themen