Forum: PC Hard- und Software Gnuplot: Sequenz von Plots erstellen


von tt8198 (Gast)


Lesenswert?

Hallo zusammen,

derzeit versuche ich mit gnuplot 4.4 eine sequenz von plots zu 
erstellen, um diese hinterher zu einem gif/movie etc. zusammenzubasteln.
Jetzt suche ich ein skript, das mir (durchnummerierte) nameXXX1.png o.ä. 
aus meinem datenfile erstellt. ich dachte an irgendeine form der 
for-schleife oder so??

viel dank schonmal für die hilfe!!

von Kai S. (kai1986)


Lesenswert?

Hallo,

du kannst Schleifen bei gnuplot dadurch erstellen, das du den 
Schleifenteil in eine eigene Plotdatei legst, diesen dann von der 
Hauptplotdatei mit dem load Befehl aufrufst und z.B. eine 
Schleifenvariable im Hauptteil anlegst, die dann jedes mal von dem 
Schleifenteil um eins hochgezählt wird. Sobald diese Variable dann die 
Obergrenze erreicht hat wird der Schleifenteil nicht mehr aufgerufen. 
Gibt dazu auch Beispiele im Netz.
Falls du keine Datenpunkte sondern nur Funktionen animieren willst 
kannst du dir das Programm Graph anschauen, das kann direkt avi Videos 
erstellen und ist ebenfalls kostenfrei.
Für wechselnde Ausgangsdateinamen der darzustellenden Daten hatte ich 
mir ein kleine Programm(Skript) geschrieben, das gewisse Strings in 
einer Vorlage durch die entsprechenden Dateinamen ersetzt. Falls daran 
interesse besteht müsste ich das kurz überarbeiten und dann kompilieren, 
wäre aber kein Problem, ist allerdings nicht sehr sonderlich schön 
geschrieben.

Gruß Kai

von Yalu X. (yalu) (Moderator)


Lesenswert?

In Gnuplot 4.6 gibt es "richtige" Schleifen. Hier ist ein kleines 
Beispiel, das 3 PNGs mit Sinuskurven unterschiedlicher Periodenlänge 
erzeugt:
1
set terminal png
2
do for [i=1:3] {
3
  set output sprintf('plot%d.png', i)
4
  plot sin(i*x)
5
}

von tt8198 (Gast)


Lesenswert?

Hallo nochmal!

Vielen dank für eure antworten! ich konnte dann heute doch noch unseren 
admin überzeugen auf gnuplot 4.6 zu wechseln, was das problem der syntax 
in der schleife ganz gut behoben hat. leider hat sich ein weiteres 
problem ergeben, das ich vorher gar nicht bedachte hatte. ich habe die 
daten in array-form gespeichert, um daraus ein image zu erstellen, das 
je nach int-wert des array elements eine anders farbiges pixel setzt 
(mifhilfe des with image befehls). wahrscheinlich muss ich die daten 
iwie anders abspeichern, damit es klappt...

vielen dank nochmal!

von Malte (Gast)


Lesenswert?

Folgendes habe ich mir gerade zusammengegoogelt.
1
reset
2
set term gif animate
3
set output "animate.gif"
4
n=24 #n frames
5
do for [i=0:n]{
6
  plot 'mult-set-data-array-file.dat' index (i) with image
7
}
8
set output

aber nicht selber ausprobiert.

von tt8198 (Gast)


Lesenswert?

mit der for-schleife versuche ich es auch gerade... ich würde halt gerne 
jede einzel matrix erst in einem einzel bild abspeichern..
wenn die datei.dat so aussieht:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 1 0 0 0
1 1 1 1 1

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 1 0 0 1
1 1 1 1 1

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 1 1 0 1
1 1 1 1 1

hätte ich gerne 3 verschiedene bilder/images..das kann ja eigentlich 
nicht so schwierig sein, aber iwie check ichs nicht.
habe mir das so in etwa gedacht, klappt leider nicht :D
mit der every-option bekomme ich auch nicht, was ich will...

n=0
do for [t=0:2] {
n=n+1
outfile = sprintf('movie/array%03.0f.png',n)
set output outfile

plot 'array.out' matrix with image

}

von tt8198 (Gast)


Lesenswert?

habs jetzt hinbekommen, indem ich den index befehl benutzt habe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.