2017-05-02 1 views
0

I ont un fichier de données contenant n positions de coordonnées à t pas de temps de c nombre de figures que je voudrais pour créer une animation dans un fichier gif utilisant gnuplot.Gnuplot animées multiples chiffres à partir du fichier de données

Le fichier de données est configuré donnant la n coordonner les positions de tous c chiffres à chaque pas de temps, comme

x1,1 y1,1 
x1,2 y1,2 
. 
. 
. 
x1,n y1,n 
x2,1 y2,1 
. 
. 
. 
xc,n yc,n 

A chaque pas de temps, je veux tracer toutes les positions n de mes c figures dans mon animation gif.

Le code suivant ne fonctionne pas exactement.

set terminal gif animate 
set output "output.gif" 

do for [i=1:time_final] { 
do for [j=1:c] { 
plot "file.dat" every 1::(i-1)*(j-1)*n::i*j*n-1 u 1:2 w filledcurves 
}} 
set output 

Je m'excuse pour le débutant de cette question.

+0

S'il vous plaît lire sur [Comment demander] (http: // stackoverflow .com/help/how-to-ask) sur StackOverflow. Plus précisément, montrez-nous ce que vous avez essayé et pourquoi cela ne fonctionne pas. – Antimony

+0

Merci, j'ai mis à jour mon post suite à votre suggestion. –

Répondre

0

Je pense que l'instruction every nécessite un petit ajustement. Chacun de vos "pas de temps" contient au total c*n enregistrements. Les nombres de points dans Gnuplot dans le contexte du mot-clé every sont basés sur 0. Cela signifie que l'étape de temps i (en supposant que le premier a i=1 comme dans votre boucle do) commence au point (i-1)*c*n. Afin de passer à "figure" j (en supposant à nouveau que le premier dans chaque étape de temps a j=1), nous devons ajouter un décalage de (j-1)*n. Maintenant, puisque chaque "figure" a n points, le décalage du dernier point dans chaque figure est n-1. Au total:

do for [i=1:time_final] { 
    stepOffset = (i-1)*c*n 
    do for [j=1:c] { 
     firstPoint = stepOffset + (j-1)*n 
     lastPoint = firstPoint + (n-1) 
     plot "file.dat" every ::firstPoint::lastPoint u 1:2 w filledcurves 
}} 

Si vous voulez fusionner les c « figures » dans une parcelle, vous pourriez faire:

do for [i=1:2] { 
    stepOffset = (i-1)*c*n 
    plot for [j=1:c] "file.dat" every ::(stepOffset + (j-1)*n)::(stepOffset + (j-1)*n + (n-1)) u 1:2 w filledcurves 
} 

Par ailleurs, depuis votre fichier de données n'a que deux colonnes, le style w filledcurves semble être égaré ici, si vous voulez remplir la zone entre la courbe et par exemple l'axe des x, w filledcurves x1 devrait fonctionner ...

+0

Fonctionne très bien, merci beaucoup! Juste peut-être modifier dans votre deuxième morceau de code "faire pour [i = i: 2]" à "faire pour [i = 1: time_final]" En ce qui concerne votre commentaire sur "rempli courbes", en fait ce que je suis en train de comploter coordonne la position des figures fermées pour que les couleurs "remplies" se retrouvent dans mes figures. –