44 votes

Gnuplot traçant les données d'un fichier jusqu'à une ligne

J'ai des données dans un fichier texte qui a disons 10000 lignes et 2 colonnes. Je sais que je peux le tracer facilement par plot "filename.txt" using 1:2 with lines . Ce que je veux, c'est simplement tracer, disons les lignes de 1000 à 2000 ou toute autre sélection raisonnable. Est-il possible de le faire facilement ? Merci beaucoup d'avance.

91voto

Stuart Lange Points 1839

Il semble que la commande "every" dans gnuplot soit ce que vous recherchez :

 plot "filename.txt" every ::1000::2000 using 1:2 with lines

Vous pouvez également pré-traiter votre fichier pour sélectionner les lignes qui vous intéressent. Par exemple, en utilisant awk :

 awk "NR>=1000 && NR<=2000" filename.txt > processed.txt

Ensuite, utilisez le "processed.txt" résultant dans votre commande/script gnuplot existant.

33voto

kev Points 41855

Plus simple :

 plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines

9voto

mgilson Points 92954

Vous pouvez probablement éviter de dépendre d'un utilitaire externe (si votre système ne les a pas installés par exemple) en utilisant la pseudo-colonne 0.

voir help plot datafile using pseudocolumn

Essayez quelque chose comme :

 LINEMIN=1000
LINEMAX=2000

#create a function that accepts linenumber as first arg
#an returns second arg if linenumber in the given range.
InRange(x,y)=((x>=LINEMIN) ? ((x<=LINEMAX) ? y:1/0) : 1/0)

plot "filename.txt" using (InRange($0,$1)):2 with lines

(testé sur Gnuplot 4.4.2, Linux)

1voto

BREMI Points 178

Je recommanderais certains outils de ligne de commande comme sed , grep ou bash . Dans ton exemple

 head -n 2000 ./file.data > temp.data

et

 tail -n 1000 temp.data > temp2.data

pourrait fonctionner. Mais je n'ai pas testé si de si grands nombres fonctionnent avec la tête et la queue.

1voto

Gnuplot ignore les valeurs NaN. Cela fonctionne pour moi pour une plage spécifiée de la coordonnée x. Cependant, vous ne savez pas comment spécifier la plage de lignes.

 cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X