fsp*_*fsp 8 plot gnuplot visible spectrum
所以我有这种数据
3.500E2 -0.956862
...
10.00E2 -1.95941
Run Code Online (Sandbox Code Playgroud)
在一个文件中.
如果我绘制它看起来像这样:

现在我希望曲线下方的区域充满可见光谱,如下所示:

我已经找到了这个论坛帖子,它为我绘制了一个很好的可见光谱,但我无法进一步添加自己的曲线,因为这似乎是一个pm3d情节.
我能做什么?
该filledcurves绘图样式无法处理这样的渐变填充,但可以修改您的数据文件与使用pm3d和splot.
该pm3d样式仅适用于曲面,因此您必须编辑数据文件以实际提供曲面网格.
为此,您必须向文件添加第二个数据块,该文件在第一列中具有相同的值,并且第二列的所有值中的最小值作为其第二列.两个块必须用空行分隔.
考虑示例数据文件spectrum.dat:
350 1
400 2
450 5
500 2
550 1
600 3
650 3
700 8
750 4
800 3
850 0
Run Code Online (Sandbox Code Playgroud)
从那里你必须得到一个文件
350 1
400 2
450 5
500 2
550 1
600 3
650 3
700 8
750 4
800 3
850 0
350 0
400 0
450 0
500 0
550 0
600 0
650 0
700 0
750 0
800 0
850 0
Run Code Online (Sandbox Code Playgroud)
这可以使用awk动态完成(由于@TomFenech,命令变得更好),然后with pm3d使用您链接的论坛帖子中的函数定义进行绘制:
lmax = 780; lmin = 380
k=lmax-lmin
set cbrange [lmin:lmax]
r(x)=x<440?-(x-440)/(440-380):x<510?0:x<580?(x-510)/(580-510):x<=780?1:0
g(x)=x<440?0:x<490?(x-440)/(490-440):x<580?1:x<645?-(x-645)/(645-580):0
b(x)=x<490?1:x<510?-(x-510)/(510-490):0
f(x)=x<420?0.3+0.7*(x-380)/(420-380):x<700?1:0.3+0.7*(780-x)/(780-700)
set palette functions f(k*gray+lmin)*r(k*gray+lmin),g(k*gray+lmin),f(k*gray+lmin)*b(k*gray+lmin)
set pm3d map interpolate 0,1
set autoscale xfix
splot '<awk ''NR == FNR {min = !min || $2 < min ? $2 : min; print; next} FNR == 1 {print ""} {$2 = min}1'' spectrum.dat spectrum.dat' using 1:2:(0):1 notitle
Run Code Online (Sandbox Code Playgroud)

请注意,如果您有足够的数据点,则无需插入pm3d调色板.在这种情况下,这可能只会给你带来奇怪的瑕疵(白色垂直线条).