我在gnuplot中有问题...
我正在从我的数据点进行绘制,这些点是离散的"线" (见附图)其中y值为1,1 / 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行的数据点对应于"行" y值为1,然后从第二行每30对应一行""哪个y值是1/2等...
因此我想从这些数据中获得最大Z值......
我也试过sed,但我失败了......
所以我的问题是,它可以找到全局最大值而不是其他本地的...... :(请帮帮我:)
我不知道...希望这是可以理解的,对不起我的英语......:)
答案 0 :(得分:1)
GPVAL_DATA_Z_MAX似乎不能解决您的问题,但您可以使用 stats 来查找所有局部最大值,然后将它们全部绘制在循环图中。
#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个块&#39;第i行)检索XY值,你就得到了第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_x
P<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