是否可以在gnuplot中每十行绘制一行?

时间:2015-11-13 21:13:01

标签: graph gnuplot sampling

我有以下数据文件:

#X1 y1 x2 y2 Number
123 567 798 900 1
788 900 87  89 2
....

我使用以下命令

绘制图表
plot '~/Desktop/pointcolor.txt' using 1:2:($3-$1):($4-$2):5 with vectors palette nohead notitle

这是结果。

Result Graph

正如你在上面的图片中看到的那样,结果是压缩的,所以我想在数据文件中每10行绘制一行相同的数字。

EDIT1:

我尝试@ewcz解决方案,如下:

stat="0 0 0 0 0 0 0" # How should I define array as [gnuplot][2] didn't support it? 
plot "< awk '{if(( (stat[$5]++)%10==0 )) print}'~/Desktop/pointt.txt" using 1:2:($3-$1):($4-$2):5 with vectors palette nohead notitle

但是我收到了这个错误:

gnuplot> load "gnuplot.cmd"
awk: line 1: syntax error at or near 

gnuplot> plot "< awk '{if(( (stat[$5]++)%10==0 )) print}'~/Desktop/pointcolor.txt" using 1:2:($3-$1):($4-$2):5 with vectors palette nohead notitle
                                                                                                                                       ^
         "gnuplot.cmd", line 6: warning: Skipping data file with no valid points

gnuplot> plot "< awk '{if(( (stat[$5]++)%10==0 )) print}'~/Desktop/pointcolor.txt" using 1:2:($3-$1):($4-$2):5 with vectors palette nohead notitle
                                                                                                                                              ^
         "gnuplot.cmd", line 6: x range is invalid

EDIT2:

解决方案:

 plot "< awk '{if((stat[$5]++)%10==0) print}' ~/Desktop/pointt.txt" using 1:2:($3-$1):($4-$2):5 with vectors palette nohead notitle

1 个答案:

答案 0 :(得分:2)

为了实现这一点,必须使用(最有可能)对输入进行某种预处理。幸运的是,Gnuplot允许以直接的方式绘制命令的结果。在您的情况下,可以将plot命令修改为:

plot "< gawk '{if((stat[$5]++)%10==0) print;}' ~/Desktop/pointcolor.txt" ...

这里,行的id(基于第五列)存储在数组stat中。如果此id可被10整除,则打印该行,从而绘制(即,丢弃其他输入行)。