Gnuplot从文件到某行打印数据
我有一些文本文件中的数据,比如说10000行和2列。我知道,我可以通过Gnuplot从文件到某行打印数据,plot,gnuplot,Plot,Gnuplot,我有一些文本文件中的数据,比如说10000行和2列。我知道,我可以通过使用1:2和行打印“filename.txt”来轻松打印它。然而,我想要的只是绘制,比如说从1000到2000的行或任何其他合理的选择。这样做容易吗?事先非常感谢 看来您正在寻找的是gnuplot中的: plot "filename.txt" every ::1000::2000 using 1:2 with lines 或者,预处理文件以选择感兴趣的行。例如,使用awk: awk "NR>=1000 &&am
使用1:2和行打印“filename.txt”来轻松打印它。然而,我想要的只是绘制,比如说从1000到2000的行或任何其他合理的选择。这样做容易吗?事先非常感谢 看来您正在寻找的是gnuplot中的:
plot "filename.txt" every ::1000::2000 using 1:2 with lines
或者,预处理文件以选择感兴趣的行。例如,使用awk:
awk "NR>=1000 && NR<=2000" filename.txt > processed.txt
awk“NR>=1000&&NR更简单:
plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
plot”我推荐一些命令行工具,如sed
、grep
或bash
。在你的例子中
head -n 2000 ./file.data > temp.data
及
可能有用。但是还没有测试过这样大的数字是否适用于head和tail。您可能可以使用伪列0消除对外部实用程序的依赖(例如,如果您的系统没有安装它们)
请参阅帮助使用伪列打印数据文件
尝试以下方法:
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
LINEMIN=1000
LINEMAX=2000
#创建一个接受linenumber作为第一个参数的函数
#如果行号在给定范围内,则返回第二个参数。
InRange(x,y)=((x>=LINEMIN)?((xGnuplot忽略NaN值。这对我来说适用于x坐标的指定范围。但不确定如何指定行范围
cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))
cutoff(c1,c2,xmin,xmax)=(c1>=xmin)*(c1有什么好的在线资料可以让我学习这种很棒的小技巧。谢谢你的回复。下面的答案是一个更好的选择!如果你在linux或mac osx上,你应该已经有了awk(它是标准*nix工具集的一部分,如sed和grep).I将首先运行上述命令作为预处理步骤(在启动gnuplot之前),这将创建一个新的数据文件“processed.txt”,同时保持现有文件不受损坏。然后应使用“processed.txt”代替“filename.txt”在您的绘图命令中。awk手册可以在这里找到:也许这也可以帮助您:这与第一个答案结合起来帮助了我:绘图“
cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))