En supposant que j'ai un fichier qui ressemble à ceci:
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
Est-il possible de faire en sorte que Gnuplot trace ces deux jeux de données dans un seul tracé avec les titres donnés sur la première ligne de chaque jeu de données?
C'est certainement possible et votre fichier de données est déjà au bon format. La fonctionnalité que vous recherchez est intégrée à columnheader(N)
qui lit les données en haut de la colonne N'th et l'utilise comme titre du tracé:
plot 'test.dat' i 0 u 1:2 w lines title columnheader(1),\
'test.dat' i 1 u 1:2 w lines title columnheader(1)
qui peut être condensé par itération:
plot for [IDX=0:1] 'test.dat' i IDX u 1:2 w lines title columnheader(1)
C'est Bruce_Warrior et Ciro Santilli réponses mais sans l'intermédiaire stats
:
# plot.gpi
datafile = ARG1
plot for [i=0:*] datafile index i using 1:2\
with lines title columnheader(1)
La boucle for
peut parcourir directement tous les jeux de données d'un fichier. Cela fonctionne dans gnuplot 5.0.5 mais je ne sais pas quand for
a acquis cette capacité. Il est documenté dans le manuel 5. mais pas le manuel 4.6 .
Sauf si la couleur de la ligne doit être déterminée par une troisième colonne d'entrée consommée par linecolor variable
(selon la réponse de Bruce), gnuplot attribuera automatiquement différentes couleurs et styles de lignes. Dans ce cas spécifique using 1:2
peut également être omis.
$ gnuplot --version
gnuplot 5.0 patchlevel 5
$ gnuplot --persist -c plot.gpi test.dat
test.dat
est
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
Une solution basée sur les réponses données par andyras ( réponse 1 et réponse 2 ) pour automatiser tout le processus consiste à utiliser:
datafile = 'test.dat'
stats datafile
plot for [IDX=1:STATS_blocks] datafile index (IDX-1) u 1:2 w lines t\
columnheader(1) lc variable
Avec cela, le script détecte automatiquement le nombre de blocs de données et il trace avec différentes couleurs et avec le titre correspondant défini dans la première ligne de chaque bloc de données.
gnuplot 5.1 (28/08/2016)
Ceci est similaire à https://stackoverflow.com/a/29495496/895245 mais avec quelques correctifs pour les versions ultérieures.
Scénario:
datafile = 'test.dat'
stats datafile nooutput
plot for [IDX=0:STATS_blocks-1] \
datafile \
index IDX \
using 1:2 \
with lines \
title columnheader(1)
Données de test:
a
1, 1
2, 2
3, 3
"b"
1, 1
2, 4
3, 9
"c, c"
1, 1
2, 8
3, 27
Production:
Cela fonctionne le 28/08/2016 qui deviendra plus tard 5.1, mais pas dans 5.0.3 (Ubuntu 16.04), car dans 5.0.3 la commande stats
donne une erreur car les en-têtes de colonne ne sont pas des données valides. Et le 28/08/2016, c'est devenu juste un avertissement.
J'ai demandé comment supprimer l'avertissement sur: https://groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/Pi4aBE2PwZ8
En utilisant des commentaires comme:
#a
1, 1
2, 2
3, 3
n'a pas fonctionné dans les deux versions que j'ai testées, elle est simplement ignorée.
Avec une légère modification de votre jeu de données (pour que les titres soient donnés en commentaires):
#"p = 0.1"
1 1
3 3
4 1
#"p = 0.2"
1 3
2 2
5 2
Vous pouvez tracer ces deux ensembles de données sur des lignes distinctes comme ceci:
plot 'data.dat' i 0 t "p = 0.1", '' i 1 t "p = 0.2"
L'option index
(i
pour faire court) de la commande plot indique à gnuplot de tracer l'ensemble de données i
th. Je ne trouve pas un moyen d'obtenir gnuplot pour obtenir automatiquement les titres de l'en-tête, c'est pourquoi je les ai spécifiés manuellement avec l'option title
(t
pour faire court).