Comment puis-je faire cela dans gnuplot:
plot "test.csv" using 1:2 if value_in_column_3 == 80.0
Il ne doit sélectionner que les lignes où la colonne 3 == 80.0 et ignorer toutes les autres lignes (il ne doit pas tracer un 0 pour les autres lignes, simplement les ignorer)
Merci d'avance.
Considérez l'ensemble de données suivant (1.dat
),
1 0.8 0
2 0.6 0
3 0.9 1
4 1.1 0
5 0.7 0
6 0.6 1
où nous voulons tracer les deux premières colonnes uniquement lorsque la troisième est égale à zéro. Ensuite, vous pouvez essayer ceci:
plot '1.dat' using 1:($3==0?$2:1/0)
(Nous remercions markjoe sur la liste de diffusion Gnuplot.)
Cas où l'on veut tracer conditionnellement sur une autre colonne contenant du texte:
les données
1 0.8 a
2 0.6 a
3 0.9 a
1 2.1 b
2 1.7 b
3 1.6 b
code
set terminal postscript color
set xrange [0:4]
set yrange [0:3]
plot "1.dat" using 1:(stringcolumn(3) eq "a"? $2:1/0) title "a" lc rgb "blue" ,\
"" using 1:(stringcolumn(3) eq "b"? $2:1/0) title "b" lc rgb "red"
commander
gnuplot < 1.par > 1.ps
Comme le dit chl ci-dessus, la seule façon de le faire dans gnuplot est plutôt hacky: vous devez utiliser l'opérateur terniaire?: De gnuplot pour générer une erreur numérique sur les points que vous souhaitez filtrer de votre ensemble de données.
Je peux être biaisé ici car je suis un auteur du projet, mais vous voudrez peut-être jeter un œil à Pyxplot http://www.pyxplot.org.uk (également gratuit et open source) , écrit par un groupe d'utilisateurs de gnuplot qui en avaient un peu marre de la syntaxe hacky comme celle-ci.
Sa syntaxe est très similaire à gnuplot, mais avec des extensions. Pour ce que vous voulez, vous pouvez spécifier un "critère de sélection" dans la commande de tracé, et les points ne sont inclus que si elle teste True. Voir http://pyxplot.org.uk/current/doc/html/sec-select_modifier.html pour plus d'informations.
Un autre hack serait d'utiliser une commande Shell comme awk
:
plot "< awk '$3==80.0 { print $1, $2 }' test.csv" using 1:2
Si vous appelez un script, utilisez column(2)
au lieu de $2
plot "1.dat" using 1:(stringcolumn(3) eq "a"? column(2):1/0) title "a" lc rgb "blue" ,\
"" using 1:(stringcolumn(3) eq "b"? column(2):1/0) title "b" lc rgb "red"