Bonjour et merci pour ton code.
Attention aux plot
successifs dans ta boucle : le tracé de l’un va écraser le précédent. Si tu veux superposer plusieurs courbes il faut faire appel à multiplot (on l’utilise plutôt pour mettre plusieurs graphes côte à côte), ou enchaîner les courbes à la suite d’une seule commande plot
. Par exemple :
tracera la fonction f et les données contenues dans data.dat sur un même graphe.
Ensuite tu utilises index
qui te permet de sélectionner un bloc de données en particulier via la variable i
ou p
. L’option every
te permet en fait un contrôle plus fin, par exemple de spécifier où démarrer dans tes données, où t’arrêter et l’incrément si tu veux sauter des points. Pour ’radar.txt’, si on oublie la condition pour le moment, je ferais :
| plot 'radar.txt' every :::0::i
|
ce qui trace ’radar.txt’ du bloc 0 au bloc i.
Passons aux conditions. Tu peux faire des if(){} else if() {}
avec les courbes souhaitées pour chaque condition. Personnellement j’aime bien les opérateurs ternaires, ça donne un code un peu plus compact. Le code suivant devrait te donner le comportement que tu attends :
16
17
18
19
20
21
22
23
24
25
26
27 | seuilFonction = 600
seuilRadar = 30
# Une fonction g pour définir quand on a le droit de tracer f
# 1/0 signifie valeur non définie pour gnuplot
g(x,y)= y>=seuilFonction ? f(x) : 1/0
do for [i=0:int(A_blocks)-1] {
plot 'filout.txt' every :::i::i,\
'radar.txt' using ($1):(i>=seuilRadar ? $2 : 1/0) every ::0::(i>=seuilRadar ? ii-30 : 0),\
g(x,i)
}
|
On trace ’filout.txt’ point par point à chaque frame, puis on trace ’radar.txt’ une fois que i vaut seuilRadar
(j’ai rajouté l’option using ...
pour éviter le tracé du premier point) et enfin on fait appel à g(x,y)
qui prend en charge le tracé de f
une fois que i a atteint la bonne valeur.
Pardon si c’est dense et si je n’ai pas compris le comportement que tu souhaitais pour ton script mais je pense en tout cas t’avoir montré pas mal de possibilités. Pour finir fais attention à tes fichiers de données : sont-ils bien sous forme de blocs ? Si ce n’est pas le cas (tous les points se suivent sans lignes blanches), il te suffira de modifier la limite de ta boucle en int(A_records)-1
et d’adapter les options every
(par exemple every ::i::i
pour ’filout.txt’).
Voilà en esperant avoir pu t’aider, et puisque tu as l’air d’y tenir, la bise