Gnuplot绘制文件中的数据到某一行

时间:2012-03-02 16:12:43

标签: plot gnuplot

我在某个文本文件中有数据,可以说10000行和2列。我知道我可以通过plot "filename.txt" using 1:2 with lines轻松地绘制它。然而我想要的只是绘制让我们说1000到2000的行或任何其他合理的选择。是否可以轻松地做到这一点?非常感谢你提前。

5 个答案:

答案 0 :(得分:76)

gnuplot中的"every" command似乎正是您所寻找的:

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

或者,预处理文件以选择您感兴趣的行。例如,使用awk:

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

然后在现有的gnuplot命令/脚本中使用生成的“processed.txt”。

答案 1 :(得分:29)

简单:

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

答案 2 :(得分:9)

您可以使用伪列0来减少对外部实用程序的依赖(例如,如果您的系统没有安装它们)。

请参阅help plot datafile using pseudocolumn

尝试类似:

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

(在Gnuplot 4.4.2,Linux上测试)

答案 3 :(得分:1)

Gnuplot忽略NaN值。这对我来说适用于x坐标的指定范围。不知道如何指定行范围。

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

答案 4 :(得分:0)

我会推荐一些命令行工具,例如sedgrepbash。在你的例子中

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

tail -n 1000 temp.data > temp2.data

可能会奏效。但是没有测试过这么大的数字是否适用于头尾。