我有一个脚本,该脚本用于获取数据(格式为x,y,z
的3列)并提供热图:
set logscale x 10
set yrange [1e-9:2e-8]
set xlabel "x"
set ylabel "y"
set multiplot
plot 'filetest.dat' u 1:2:9 with image
这是2D热图,如下所示:
我要做的就是以2个间隔的z值(例如-20到-8)将轮廓添加到此绘图中,不幸的是,我没有找到任何答案可以帮助我。任何帮助将不胜感激。
答案 0 :(得分:0)
尽管www.gnuplot.info上有很多关于轮廓的示例,但我找不到您的确切情况,因为这些示例是函数而不是数据块或数据文件的(嗯,应该相似)。
以下代码可以满足您的要求,但是添加标签的结构'' u 1:2:3:("") w labels
在我看来仍然很奇怪,并且不允许绘制装箱的标签。
在gnuplot控制台中,检查help contour
和help cntrparam
。
代码:
### pm3d with contour lines
reset session
set view equal xyz
# create some test data
set samples 40
set isosamples 40
set table $Data
splot '++' u 1:2:($1*$2/2-9)
unset table
set view map
set contour base
set cntrparam levels incremental -20,2,-8
set cntrlabel font ",10"
set xrange[-5:5]
set yrange[-5:5]
splot $Data u 1:2:3 w pm3d notitle, '' u 1:2:3:("") w labels notitle
### end of code
结果:
添加:
这是使用plot w image
而不是splot w pm3d
的另一种方法。
尽管仍然不能完全满足轮廓线上方的白色标签框的要求。向标签添加偏移量将无法同时适用于所有标签。我不确定是否有办法只中断标签的轮廓线。
代码:
### heatmap with contour lines
reset session
set view equal xyz
# create some test data
set samples 40
set isosamples 40
set table $Data
splot '++' u 1:2:($1*$2/2-9)
unset table
set view map
set contour base
set cntrparam levels incremental -20,2,-8
set cntrlabel font ",10"
set xrange[-5:5]
set yrange[-5:5]
set style textbox noborder opaque
# put contour lines in a separate datablock
unset surface
set table $Contour
splot $Data u 1:2:3
unset table
plot $Data u 1:2:3 w image notitle, \
$Contour u 1:2 w l lw 2 lc "black" not, \
'' u 1:2:3 every 40::3 w labels boxed notitle
### end of code
结果:
添加2:
另一个带有彩色轮廓线和键而不是标签的变体。这似乎有点麻烦,我希望有一个更简单的解决方案。
代码:
### heatmap with colored contour lines
reset session
set view equal xyz
# create some test data
set samples 40
set isosamples 40
set table $Data
splot '++' u 1:2:($1*$2/2-9)
unset table
set view map
set contour base
set cntrparam levels incremental -20,2,-8
set xrange[-5:5]
set yrange[-5:5]
set style textbox noborder
# put contour lines in a separate datablock
unset surface
set table $Contour
splot $Data u 1:2:3
unset table
# get contour levels unique and in sorted order
set table $Dummy
plot $Contour u 3 w table
unset table
set table $ContourSorted
plot $Dummy u 1 smooth freq
unset table
print $ContourSorted
set key out right Left
plot $Data u 1:2:3 w image notitle, \
for [i=0:*] $Contour u 1:2:3 index i w l lw 2 lc i+1 not, \
for [i=|$ContourSorted|-2:5:-1] $ContourSorted u (NaN):1 w l lw 2 lc |$ContourSorted|-i-1 ti word($ContourSorted[i],1)
### end of code
结果: