Gnuplot条件绘图

时间:2014-06-26 08:34:47

标签: conditional gnuplot

我需要使用gnuplot使用直线和点在2D绘图中绘制风向值(y)与时间(x)。如果连续值靠近在一起,这可以正常工作。如果值例如以250度分开,那么我需要具有检查先前y值并且不绘制连接两个点的线的条件。当风道在280度到20度扇区并且地块如北风一样凌乱时,就会发生这种情况。由于数据是时间依赖的,除非在特定时间点,否则我不能使用极坐标图。我需要随着时间的推移显示方向的变化。

基本上问题是:

对y绘制y;当(y2-y1)> = 180然后断开/擦除连接连续点的线 谁能给我一个如何做到这一点的例子?

数据文件中的样本是:

2014-06-16 16:00:00 0.000 990.081 0.001 0.001 0.001 0.001 0.002 0.001 11.868 308 002.54 292 004.46 00 
2014-06-16 16:10:00 0.000 990.047 0.001 0.001 0.001 0.001 0.002 0.001 11.870 303 001.57 300 002.48 00 
2014-06-16 16:20:00 0.000 990.014 0.001 0.001 0.001 0.001 0.002 0.001 11.961 334 001.04 314 002.07 00 
2014-06-16 16:30:00 0.000 990.014 0.001 0.001 0.001 0.001 0.002 0.001 11.818 005 001.18 020 002.14 00 
2014-06-16 16:40:00 0.000 990.014 0.001 0.001 0.001 0.001 0.002 0.001 11.725 332 001.14 337 002.26 00

我想绘制第12列与时间的对比。

2 个答案:

答案 0 :(得分:1)

您可以在using语句中插入过滤条件,如果条件未满,则使用值1/0。在这种情况下,这一点与其他人无关:

set timefmt '%Y-%m-%d %H:%M:%S'
set xdata time
unset key

y1 = y2 = 0
plot 'data.dat' using 1:(y1 = y2, y2 = $12, ($0 == 0 || y2 - y1 < 180) ? $12 : 1/0) with lines,\
     'data.dat' using 1:12 with points

使用您的数据样本和gnuplot版本4.6.5,我得到了图:

enter image description here

不幸的是,通过这种方法,您无法对线条进行分类,但只能对点进行分类,并且不会绘制1/0点之后的线条。

更好的方法是在发生跳转时使用awk插入空行。在2D绘图中,来自不同数据块的点(由单个新行分隔)未连接:

set timefmt '%Y-%m-%d %H:%M:%S'
set xdata time
unset key

plot '< awk ''{y1 = y2; y2 = $12; if (NR > 1 && y2 - y1 >= 180) printf("\n"); print}'' data.dat' using 1:12 with linespoints

答案 1 :(得分:1)

为了打破连接线,必须满足两个条件语句,并且BOTH必须包含换行语句printf(&#34; \ n&#34;):

情节&#39;&lt; awk&#39;&#39; {y1 = y2; y2 = 12美元; if(NR> 1&amp; y2-y1> = 180)printf(&#34; \ n&#34;); if(NR> 1&amp; y2 -y1&lt; = 0)printf(&#34; \ n&#34;);打印}&#39;&#39; /Desktop/plotdata.txt'使用带有线点的1:12