les données du tracé de la conduite au script gnuplot
je veux créer un gnuplot avec trois parcelles. Les données devraient être en ligne (comme je veux seulement
il devrait ressembler à ceci:
actuellement, j'utilise le script gnuplot suivant pour créer le scénario:
set terminal png
set output "test.png"
plot for[col=2:4] "data.txt" using 1:col title columnheader(col) with lines
le fichier data.txt
est:
Generation Best Worst Average
0 2 1 0
1 3 1 2
2 4 3 3
3 4 3 3
4 6 3 4
5 7 4 5
6 9 6 7
7 10 6 9
8 10 5 6
9 11 6 8
10 12 7 9
je voudrais faire passer les données.txt dans gnuplot et ne pas compter sur les fichier de données référencé dans le script.
Quelque chose comme cat data.txt | gnuplot plot.gnu
.
La raison en est que j'ai plusieurs fichiers data.txt
et que je ne veux pas créer un fichier plot.gnu
pour chacun d'eux.
j'ai lu à propos de la spéciale '-'
fichier dans ce fil stackoverflow et j'ai lu à propos de parcelles multiples dans un fichier . Toutefois, cela nécessiterait d'inclure les données avec gnuplot code, ce qui n'est pas propre.
6 réponses
si vous êtes sur un système Unix (C'est-à-dire Pas Windows), vous pouvez utiliser '<cat'
au lieu de '-'
pour lire à partir de stdin:
plot '<cat' using ...
alors vous pouvez faire cat data.txt | gnuplot script.gp
. Cependant, dans le cas précis que vous mentionnez dans votre question, avec le tracé dans la boucle for, vous lisez l'entrée trois fois. Ainsi, l'envoi des données par l'intermédiaire de stdin n'est pas approprié, puisque les données disparaîtront après la première lecture.
n'est pas une réponse directe, mais c'est ce que j'ai utiliser pour trouver rapidement les données. il est particulièrement utile avec la commande cut
151930920"
cat data.txt | cut -f2 -d' ' | gnuplot -p -e "plot '<cat'"
Qu'y a-t-il de mal à utiliser l'option-e de Gnuplot de shell? Vous pouvez fournir une variable comme entrée, par exemple des données.txt, de shell à l'aide de:
gnuplot -e "filename='data.txt';ofilename='test.png'" plot.gnu
vous devriez être en mesure d'appeler la commande ci-dessus plusieurs fois avec des valeurs différentes pour" nom de fichier " de shell en utilisant une boucle pour.
et puis vous changez votre scénario.gnu à:
set terminal png
set output ofilename
plot for[col=2:4] filename using 1:col title columnheader(col) with lines
si vous voulez tracer des données provenant d'une pipe plus d'une fois, vous devez les stocker d'une façon ou d'une autre en mémoire. Ma méthode préférée est d'utiliser un fichier temporaire dans /dev/shm
, qui existe dans la plupart des systèmes Linux et correspond à la RAM. Juste pour garder les choses propres, j'ai mis un piège pour supprimer le fichier temporaire à la sortie.
exemple (en utilisant vos données.txt):
cat data.txt | (cat > /dev/shm/mytempfile && trap 'rm /dev/shm/mytempfile' EXIT && gnuplot -e "set terminal dumb; plot for[col=2:4] '/dev/shm/mytempfile' using 1:col title columnheader(col) with lines")
résultat:
12 ++------------+-------------+-------------+-------------+------------**
+ + + + + Best ****** +
| Worst***#### |
10 ++ *******Average $$$$$$++
| **** |
| *** $$$$ $$$$
8 ++ ** $$ $$ $$$$$ ++
| ** $$ $$ $$ |
| ***** $$$ $$ ####
6 ++ **** $$ ############# $$ ##### ++
| ** $$ ## # #### |
| ** $$$ ## ## |
| ** $$$$ ## |
4 ++ *********** $$$$$ #### ++
| ***** ################### |
| **** $$## |
2 ** $$$## ++
######### |
+ $$ + + + + +
0 $$------------+-------------+-------------+-------------+------------++
0 2 4 6 8 10
Que Diriez-vous d'utiliser la commande system ()
set terminal png
set output "test.png"
# read shell input
# the echo prints the variable, which is then piped to gnuplot
fname = system("read filename; echo $filename")
plot for[col=2:4] fname using 1:col title columnheader(col) with lines
vous pouvez l'appeler maintenant avec
echo "data.txt" | gnuplot script.gp
mélanger les deux réponses:
cat data.txt | gnuplot -e "set terminal png; set output "test.png"; plot for[col=2:4] '<cat' using 1:col title columnheader(col) with lines