2016-11-18 61 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 –