web-dev-qa-db-fra.com

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 un graphique, disons les lignes de 1000 à 2000 ou toute autre sélection raisonnable. Est-il possible de le faire facilement? Merci beaucoup d'avance. 

30
YBE

Plus simple:

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

Il semble que vous recherchiez le "every" command in gnuplot:

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 fichier "processing.txt" résultant dans votre commande/script gnuplot existant.

72
Stuart Lange

Vous pouvez probablement supprimer le recours à un utilitaire externe (par exemple, si votre système ne les a pas installés) à l'aide de 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)

8
mgilson

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

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

Je recommanderais des outils en ligne de commande tels que sed, grep ou bash. Dans votre exemple

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

et

tail -n 1000 temp.data > temp2.data

pourrait fonctionner. Mais je n'ai pas vérifié si un si grand nombre de personnes travaillait avec la tête et la queue.

0
BREMI