Gnuplot plotting data from a file up to some row

后端 未结 5 1520
逝去的感伤
逝去的感伤 2020-11-30 22:44

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

相关标签:
5条回答
  • 2020-11-30 23:25

    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)

    0 讨论(0)
  • 2020-11-30 23:37

    Simpler:

    plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
    
    0 讨论(0)
  • 2020-11-30 23:38

    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.

    0 讨论(0)
  • 2020-11-30 23:40

    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.

    0 讨论(0)
  • 2020-11-30 23:48

    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))
    
    0 讨论(0)
提交回复
热议问题