2011-02-12 1 views
12

Je souhaite qu'un seul fichier .plt stocke les commandes data et gnuplot. Mes données ressemblecomment faire plusieurs graphiques à partir des mêmes données d'entrée standard dans gnuplot?

# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 

et correspond à deux parcelles: (x1, y1) et (x2, y2).

Je sais que je peux utiliser "-" comme:

plot "-" using 1:2 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

Mais cela ne générer qu'une seule parcelle, à savoir, (x1, y1). Je suis en train de faire quelque chose comme

plot "-" using 1:2, "-" using 3:4 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

mais évidemment cela ne fonctionne pas depuis gnuplot attend une nouvelle série de données de l'entrée standard pour la deuxième "-".

Notes:

  1. Je ne peux pas changer le style des données. Il s'agit de quatre colonnes. Il semble que je peux le faire avec reread mais cela nécessite deux fichiers. Je ne veux vraiment qu'un seul fichier.

Répondre

7

Vous ne pouvez pas faire cela sans modifier quelque chose sur la façon vous entrez les données. Lors de l'alimentation de données gnuplot via une entrée standard, il faut que plusieurs ensembles de données soient délimités avec deux lignes vides entre eux, ou qu'ils soient entrelacés sur des lignes successives. Les options sont:

  • alimentent les deux ensembles de données dans différentes commandes de tracé tout à fait.

  • Modifiez le format de fichier de sorte que les ensembles de données ont lignes vides entre eux, puis les référencer tous avec index.

  • Modifiez le format de fichier afin que lignes alternées représentent différents ensembles de données , les référencer alors tout avec chaque.

  • Mettez les données dans un seul fichier , le script traçante dans une autre, puis d'utiliser ces données fichier plus d'une fois avec différentes utilisant clauses chaque fois.

Il y a une intro à la tous les et index commandes à partir de How do I plot several data sets in a single file? Ce sont les seules installations intégrées dans gnuplot pour ce genre de chose, et ce n'est pas non plus ce que vous demandiez. c'est bien que vous ayez déjà modifié la mise en forme des données, car cela n'allait jamais fonctionner comme vous l'aviez espéré.

+0

Merci. Bon à savoir ce qui peut et ce qui ne peut pas être fait (je souhaite que cela puisse être fait cependant). Bien que j'ai changé mon fichier, le code C++ génèrerait le format original plus rapidement et je l'ai aimé plus. Quoi qu'il en soit, juste une question rapide: Apparemment, je ne peux pas combiner '" - "' et 'every', non? – Mahdiyar

+0

pourriez-vous s'il vous plaît donner un exemple comment faire cela? gnuplot lit (en faisant la première intrigue) à la fin, peu importe ce que je fais. –

4

Je ne sais pas à quel point vous pouvez modifier le fichier, mais le tidiest chemin est sans doute de mettre la chose dans un script script shell/batch (êtes-vous sur Linux ou Windows?)

sur linux je fais quelque chose comme ça

#!/bin/bash 

#put my data in a file 
echo " 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
" > my_dat.dat 

#launch gnuplot 
gnuplot<<EOF 
#gnuplot commands here 
set output "test.ps" 
set term postscript 

plot "my_dat.dat" u 1:2, \ 
    "my_dat.dat" u 3:4 

set term pop 
set output 

EOF 

# cleanup 
rm my_dat.dat 

Je chmod + Wrx le fichier que je mets les commandes ci-dessus et exécuter.

Note: il semble aussi être une similitude à cette question:

gnuplot stdin, how to plot two lines?

Vous pourriez vouloir regarder là aussi

+0

Merci. Oui, je suis sur Linux. En fait, j'ai réussi à changer la façon dont les données ont été formatées en modifiant le code C++ qui l'avait généré. Donc, mon problème est parti maintenant. Mais je suis toujours curieux de savoir comment on pourrait le faire de telle sorte que je verrais l'intrigue avec un fichier unique.plt dans le format ci-dessus et l'émission de '$ gnuplot file.plt'. – Mahdiyar

+0

@Mahdiyar Oui, je suis curieux à ce sujet aussi. Utiliser gnuplot avec les scripts est la manière habituelle je pense (vous pouvez appeler votre programme C++ à partir du shell aussi faire fonctionner le tout avec 1 ligne), voir - http://t16web.lanl.gov/Kawano/gnuplot/intro/working -e.html pour plus d'informations – Tom

+2

J'aime cette méthode de script shell, car je veux juste que mon application génère un seul fichier plottable. Pour garder le système de fichiers propre, utilisez la commande bash tempfile: 'tmpFile = \' tempfile \ '' et ensuite dans votre commande plot utilisez 'plot '$ tmpFile" 1: 2 ... ' –

1

Je sais que c'est un ancien poste, mais je voudrais signaler une autre stratégie au cas où quelqu'un d'autre se bat encore avec cette question:

Vous pouvez également utiliser votre commande de traçage et entrer les données deux fois, comme:

plot "-" using 1:2, "-" using 3:4 
# 1 2 3 4 
    5 6 7 8 
    e 
    1 2 3 4 
    5 6 7 8 
    e 

Gnuplot attendra deux blocs dans ce cas. Je trouve cela très utile quand je ne veux pas changer les commandes et quand je nourris Gnuplot par pipe. Dans un scénario en temps réel (en fonction de la taille des données), il est très probable qu'il soit encore plus rapide que la mise en mémoire tampon d'un fichier sur le disque dur. D'après mon expérience, la quantité de code nécessaire pour mettre en mémoire tampon les données dans votre script, qui est nécessaire pour les rediriger plus d'une fois, est très faible.

2

option Nouveau depuis gp5.0 (voir aussi help inline data):

$dataset << EOD 
1 2 3 4 
5 6 7 8 
EOD 

plot $dataset using 1:2, $dataset using 3:4 
Questions connexes