gnuplot:热图像3D表面的可见光谱

时间:2017-05-14 16:46:56

标签: gnuplot

我有数据(如(x,y,z)点系列)我需要根据z使用真实光谱颜色(从(红外)红到(紫)紫)包括绿色绘制3D表面。所以我需要像热像这样的热图 enter image description here

那么,我该怎么做?

除了着色外都很好。

如果有必要,有我的gnuplot脚本:

set hidden3d
set dgrid3d 47*4,205*1 gauss 2
set pm3d
set cbrange[1.007694:1.210099]
set xrange [] reverse
unset ztics
unset key
set view 10,70
set xlabel "x"
set ylabel "y"
set ticslevel 0

set term postscript eps enhanced monochrome
set output "plot-m.eps"
splot 'plot.d' with lines

set term postscript eps enhanced color
set output "plot-c.eps"
replot

set terminal png size 1024,768 enhanced font "DejaVu Serif,20"
set output "plot-c.png"
replot

我的示例图片是:enter image description here

1 个答案:

答案 0 :(得分:1)

我对你的问题感兴趣,所以我找到了this并制作了一个gnuplot脚本。这里调色板设置为"函数",即R,G和B在[0:1]范围内计算。您可以将绘图范围映射到[400:700]范围,以获得绘图的完整光谱。范围为400至700 nm。

reset
set term pngcairo size 1200,800
set output 'colormap2.png'

R(k)=( \
l=k*300+400, \
(l>=400.0 && l<410.0)? (t=(l-400.0)/(410.0-400.0), (0.33*t)-(0.20*t*t)) : \
(l>=410.0 && l<475.0)? (t=(l-410.0)/(475.0-410.0), 0.14-(0.13*t*t)) : \
(l>=545.0 && l<595.0)? (t=(l-545.0)/(595.0-545.0), (1.98*t)-(t*t)) : \
(l>=595.0 && l<650.0)? (t=(l-595.0)/(650.0-595.0), 0.98+(0.06*t)-(0.40*t*t)) : \
(l>=650.0 && l<700.0)? (t=(l-650.0)/(700.0-650.0), 0.65-(0.84*t)+(0.20*t*t)) : \
0.0)


G(k)=( \
l=k*300+400, \
(l>=415.0 && l<475.0)? (t=(l-415.0)/(475.0-415.0), (0.80*t*t)) : \
(l>=475.0 && l<590.0)? (t=(l-475.0)/(590.0-475.0), 0.8+(0.76*t)-(0.80*t*t)) : \
(l>=585.0 && l<639.0)? (t=(l-585.0)/(639.0-585.0), 0.84-(0.84*t)) : \
0.0)

B(k)=( \
l=k*300+400, \
(l>=400.0 && l<475.0)? (t=(l-400.0)/(475.0-400.0), (2.20*t)-(1.50*t*t)) : \
(l>=475.0 && l<560.0)? (t=(l-475.0)/(560.0-475.0), 0.7-t+(0.30*t*t)) : \
0.0)

set palette model RGB functions R(gray),G(gray),B(gray)
set pm3d map
set samples 2000
set xrange [400:700]
set cbrange [400:700]
splot x

enter image description here