用gnuplot用保存在文件中的点绘制不同的行

时间:2014-05-19 15:50:38

标签: gnuplot

我有一个文本文件如下:

0.0120363241833/ 200497.697562   
0.0152237370833/    200496.992937    
0.0181834776333/    200496.122072    
0.0211432181833/    200495.303516    
0.0241029587333/    200494.602714    
0.0270626992833/    200493.73507     
0.0300224398333/    200493.033097    
0.0332098527333/    200492.167099    
0.0361695932833/    200491.352509    
0.0391293338333/    200490.603494    
0.0420890743833/    200489.842834    
0.0450488149333/    200489.147658

所以我想要读取每两个连续点并画出通过它们的线。 我做的是:

do for [i=1:12]{

  t_0= awk 'NR==i {print $1}' "../graph1.txt"

  t_1= awk 'NR==$1+i {print $1}' "../graph1.txt"

  p_0= awk 'NR==i {print $2}' "../graph1.txt"

  p_1= awk 'NR==i+1 {print $2}' "../graph1.txt"


  m= (p_1-p_0)/(t_0-t_1)

  f(x) = m*(x-t_0)+p_0

  plot f(x)

}   

但它不起作用,任何人都可以给我建议去做吗?

2 个答案:

答案 0 :(得分:0)

如果你摆脱/并每隔两行添加一个空行:

0.0120363241833 200497.697562
0.0152237370833 200496.992937

0.0181834776333 200496.122072
0.0211432181833 200495.303516

0.0241029587333 200494.602714
0.0270626992833 200493.73507

...

然后一个简单的

plot 'data.dat' w l

会做你想要的。

答案 1 :(得分:0)

这里不需要循环。您可以使用awk将数据拆分为多对,并使用with lines,如下所示:

plot '<awk -F/ ''NR%2{print ""}{print $1,$2}'' ../graph1.txt' with lines

-F切换到awk指定输入字段分隔符(正斜杠)。第一个awk块每两行打印一个空行。第二列打印两列,由默认输出字段分隔符(单个空格)分隔。

您还可以更改gnuplot中的数据文件分隔符,从而缩短awk脚本:

set datafile separator '/'
plot '<awk ''NR%2{print ""}1'' ../graph1.txt' with lines

这里,awk命令末尾的1告诉awk执行默认操作,即打印整行。

无论哪种方式,这都是你得到的:

output of plot command