I have data in some text file which has let\'s say 10000 rows and 2 columns. I know that I can plot it easily by plot \"filename.txt\" using 1:2 with lines
. Wh
You can probably cut out the reliance on an external utility (If your system doesn't have them installed for example) using the pseudo-column 0.
see help plot datafile using pseudocolumn
Try something like:
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
(tested on Gnuplot 4.4.2, Linux)
Simpler:
plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
It appears that the "every" command in gnuplot is what you're looking for:
plot "filename.txt" every ::1000::2000 using 1:2 with lines
Alternatively, pre-process your file to select the rows in which you are interested. For example, using awk:
awk "NR>=1000 && NR<=2000" filename.txt > processed.txt
Then use the resulting "processed.txt" in your existing gnuplot command/script.
I would recommend some commandline tools like sed
, grep
or bash
. In your example
head -n 2000 ./file.data > temp.data
and
tail -n 1000 temp.data > temp2.data
might work. But haven't tested if such large numbers work with head and tail.
Gnuplot ignores NaN values. This works for me for a specified range of the x coordinate. Not sure how to specify row range though.
cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))