[gnuplot] Serial plotting avec gnuplot

Applications, problèmes de configuration réseau
patou355
Daikyu
Messages : 50
Inscription : mar. 13 mars 2012, 21:34

[gnuplot] Serial plotting avec gnuplot

Message par patou355 »

Voici ce que je cherche à faire :
Imaginons que j'aie un dossier rempli de fichiers de points, tous au format suivant :

t(ns) tension (V)
0 1.5
2 4.2
4 3.7
...

Est-il possible de générer un fichier svg correspondant à chaque fichier de point en une seule fois (je veux dire en lançant une seule commande) ? Je voudrais aussi qu'il soit malin, et qu'il utilise la première ligne comme étiquette pour le nom des axes. Et même, s'il peut utiliser le nom du fichier pour donner un titre au graphe, ce serait fabuleux !

Je ne pars pas complètement de 0, j'ai déjà écrit qqc, qui me permet de plotter 1 par 1, mais dans ce script, il faut tout retaper à la main (nom des axes, titres des graphes etc.)

Code : Tout sélectionner

set terminal svg size 600,400 dynamic enhanced fname 'Bookman old style'  fsize 15                                                                       
set output 'gnieh.svg'
#set dummy t,y
set key bmargin center horizontal Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
set xlabel "temps (ns) "
set ylabel "tension (V)"
set title "Cellule sans plan de masse"
set grid

#set parametric
#set samples 160, 160
#plot  "essai2.dat" using 1:2 title 'Column' with lines
plot  "InstabBO.dat" using 1:2 title 'Alimentation' with lines linewidth 3, \
"InstabBO.dat" using 1:3 title 'Signal de sortie' with lines linewidth 3
Dois-je combiner cela avec une boucle for dans un script bash ? Gnuplot sait-il faire ça récursivement tout seul ?

Merci pour votre aide

Patrick.
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [gnuplot] Serial plotting avec gnuplot

Message par FoolEcho »

Salut,

Pour le titre, il peut te prendre le nom du fichier par défaut, il me semble (très très vagues souvenirs... :mrgreen: ).
Pour les colonnes de tes .dat, tu devrais pouvoir te rapprocher avec http://stackoverflow.com/questions/1841 ... in-gnuplot) il te suffit de faire comme tu as fait, c'est-à-dire ne pas commenter les noms et de rajouter autotitle columnheader à key (donc attention, ça nommera les courbes, pas les axes !). Tu ne dois pas être loin avec quelque chose comme (exemple foireux !):

Code : Tout sélectionner

#t(ns) tension (V)
Temps "Signal de sortie"
0 1.5
2 4.2
4 3.7
et en conséquence pour gnuplot:

Code : Tout sélectionner

set key bmargin center horizontal Right noreverse enhanced autotitle columnheader box linetype -1 linewidth 1.000
plot  "InstabBO.dat" using 1:2 with lines linewidth 3, \
"InstabBO.dat" using 1:1 with lines linewidth 3
Si tu as des espaces dans les noms de tes colonnes, des guillemets doivent résoudre la question.

Pour les noms des axes par contre (xlabel/ylabel), je n'ai rien vu pour le faire... Je dirai que soit tu as un petit script bash pour parser la première ligne de commentaire (on peut imaginer que pour gagner du temps c'est directement le code à injecter dans gnuplot :sifflote2:). Pour le traitement par lots, je pense qu'un script bash te résoudra très vite la question (itération sur un répertoire de tes données ; pour chaque fichier de données appliquer un squelette de code générique à injecter dans gnuplot).
«The following statement is not true. The previous statement is true.» :nage:
patou355
Daikyu
Messages : 50
Inscription : mar. 13 mars 2012, 21:34

Re: [gnuplot] Serial plotting avec gnuplot

Message par patou355 »

Merci pour cette réponse, je ne suis pas encore complètement arrivé à mes fins, mais j'ai l'impression de tenir le bon bout :)

J'aurais une dernière question : mon oscilloscope me sort un axe des temps en secondes, ce qui est assez incommodant sur mon graphe où tout est de l'ordre de la nanoseconde. Il me met un e-9 à chaque graduation. Est-il possible de dilater l'axe (au hasard d'un facteur 10⁹) de manière à ce que ce soient des nanosecondes bien plus lisibles qui soient affichées ?
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [gnuplot] Serial plotting avec gnuplot

Message par FoolEcho »

Regarde du côté de set {x|y}tics. Tu pourras déterminer les intervalles, voire éventuellement utiliser des étiquettes ou n'afficher que certaines valeurs.
«The following statement is not true. The previous statement is true.» :nage:
patou355
Daikyu
Messages : 50
Inscription : mar. 13 mars 2012, 21:34

Re: [gnuplot] Serial plotting avec gnuplot

Message par patou355 »

Mais là mon souci n'est pas une histoire d'intervalle, ou de tronquer l'axe, il s'agit de transformer 1e-9 en 1e0 ; 2e-9 en 2e0, etc., et en guise de caption, j'affiche t (ns) au lieu de t(s). En fait je veux que Gnuplot me multiplie lui-même l'axe des abscisses...
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [gnuplot] Serial plotting avec gnuplot

Message par FoolEcho »

J'avais mal compris, désolé. Sinon, il doit pouvoir le faire, il te suffit d'appliquer la multiplication sur ta colonne (à vérifier avec la doc, using 1:1*ton_facteur ou using 1:$1*ton_facteur ... un truc comme ça :mrgreen: ).
«The following statement is not true. The previous statement is true.» :nage:
patou355
Daikyu
Messages : 50
Inscription : mar. 13 mars 2012, 21:34

Re: [gnuplot] Serial plotting avec gnuplot

Message par patou355 »

Ok, je vais voir ça...

Pour ce rapport, je vais faire ça avec QTIplot, le prochain, j'espère pouvoir le faire avec Gnuplot, et le gain de temps qui va avec : sortir 25 courbes en 1/4 de seconde au lieu de 2H ça change pas mal de choses quand-même !

Patrick
Répondre