2016-11-18 31 views
0

我在gnuplot的一个问题,局部最大...gnuplot的发现3D数据

我从哪个是离散的“台词”我的数据点进行的splot(见附件图)的1,1 y值之间/ 2,1/3等... 在每一个离散的“线”我想得到最大的Z值和它的X和Y坐标,并突出显示它们,或者可能适合他们等功能...

这里是我的代码:

set title "1/m vs mutation rate" 
#set term pdfcairo size 6,4 
set term x11 

set xlabel "Mutation rate" 
set ylabel "1/m" 

set xrange[0.0001:0.05] 
set yrange[1.0/30:1] 
unset log x 

set cbrange[0:0.35] 
set zrange[0:1] 
set palette defined (0 "green", 1 "blue", 2 "red") 

#set view 78,348,1,1 
set view map 

set output "muemmeres500map.pdf" 

splot 'muemmeres500.txt' u 1:2:3 with points pt 5 ps 1 palette, "muemmeres500.txt" every 30 using ($3==GPVAL_DATA_Z_MAX?$1:NaN):($3==GPVAL_DATA_Z_MAX?$2:NaN):3 title "max1" lc rgb'black' lw 4, "muemmeres500.txt" every 30::2 using ($3==GPVAL_DATA_Z_MAX?$1:NaN):($3==GPVAL_DATA_Z_MAX?$2:NaN):3 title "max2" lc rgb'black' lw 4, "muemmeres500.txt" every 30::3 using ($3==GPVAL_DATA_Z_MAX?$1:NaN):($3==GPVAL_DATA_Z_MAX?$2:NaN):3 title "max3" lc rgb'black' lw 4, "muemmeres500.txt" every 30::4 using ($3==GPVAL_DATA_Z_MAX?$1:NaN):($3==GPVAL_DATA_Z_MAX?$2:NaN):3 title "max4" lc rgb'black' lw 4, "muemmeres500.txt" every 30::5 using ($3==GPVAL_DATA_Z_MAX?$1:NaN):($3==GPVAL_DATA_Z_MAX?$2:NaN):3 title "max5" lc rgb'black' lw 4 

unset output 

这里是数据文件:http://pastebin.com/umqGWtyy

如图所示,“线”数据点对应于数据文件中的每一行,因此,例如,从第一个开始,然后每30个数据点对应于具有ay值1的“行” ,然后从第二线每30对应于Y值是1/2等的“线” ......

所以我想从只是那些数据的最大Z值...

我也试过sed,但我失败了...

所以我的问题是,它可以找到全球最大值,而不是其他本地的...... :(请帮助我: )

这里是图片:enter image description here

我不知道......希望这是可以理解的,我的英语很抱歉...... :)

回答

1

GPVAL_DATA_Z_MAX似乎并不为你的工作问题但是您可以使用统计信息来查找所有局部最大值,然后将它们全部绘制在循环图中。

#Do it before setting the ranges (the column will be handled as an x column and it might get out of xrange) 
do for [i=0:28]{ 
    #Give an indexed prefix to each stat (so they *all* become accessible from outside the loop, like "A12_max" or "A25_min") 
    stats 'muemmeres500.txt' every 30::i u 3 nooutput prefix "A".i 
} 

#set all the things you need for the plot (including ranges) 
... 

splot 'muemmeres500.txt' u 1:2:3 with points pt 5 ps 1 palette, \ 
     for [i=0:28] '' every 30::i u 1:2:($3==value("A".i."_max") ? $3 : NaN) notitle #t "Max".(i+1) 

注:从零使用开始的索引。

这只适用于绘图,你有所有的最大值,但你还没有X和Y坐标。

如果您可以从A<n>_index_max行(实际上是其30 *索引+ i或第n个块的第i行)检索X Y值,那么您也具有最大值的索引,因此您具有第n个最大位置。要检索第n行,您可以使用统计信息再与

do for [i=0:28]{ 
    stats 'muemmeres500.txt' every ::i:value("A".i."_index_max"):i:value("A".i."_index_max") u 1:2 nooutput prefix "P".i 
} 

如果你得到Ai_统计后,这个权利,你已经把所有的位置P<i>_max_xP<i>_max_y和Z值A<i>_max

如果你愿意,你可以把它们打印到文件:

set print "maxima.dat" 
do for [i=0:28]{ 
    print value("P".i."_max_x"), (value("P".i."_max_y")), (value("A".i."_max")) 
} 
unset print 
+0

谢谢你,伟大工程! http://imgur.com/a/Fo2Fd –