我正在尝试使用以下代码为Himmelblau's function绘制一个简单的等高线图(在gnuplot中):
f(x,y)=(((x**2)+(y)-11)**2)+(((x)+(y**2)-7)**2)
set xrange [-5:5]
set yrange [-5:5]
set contour base
set cntrparam level discrete 13.59085,25,50,100,150,300,500,1000
set table 'cont.dat'
splot f(x,y)
unset table
reset
set xrange [-5:5]
set yrange [-5:5]
unset key
p './cont.dat' w l lt -1
我得到以下情节结果:
我想消除的情节有一些问题:
我觉得上述两个问题都是相关的,但无法弄清楚如何。能帮助我理解并希望消除这些问题吗?
编辑1:我找到了问题-2的答案,即改善平滑度。我可以通过增加isosample
来实现。但我仍然得到很多水平线,如下图所示。
但如何删除这些水平线?我只想要指定等级的轮廓线。
答案 0 :(得分:2)
以下是仅绘制轮廓线的方法:必须使用unset surface
,仅绘制轮廓线,并使用set view map
查看上图。另请参阅gnuplot演示中的2D contour projection plot。
使用set isosamples
可以实现平滑,但在某些方面也可以使用例如set cntrparam bspline
。 f(x,y)=(((x**2)+(y)-11)**2)+(((x)+(y**2)-7)**2)
set xrange [-5:5]
set yrange [-5:5]
set contour base
set cntrparam level discrete 13.59085,25,50,100,150,300,500,1000
set isosamples 250
unset surface
set view map
set key out
splot f(x,y)
和类似的。
所以你的脚本变成了:
{{1}}
结果(使用4.6.3):
答案 1 :(得分:0)
我能够解决这两个问题。问题-2的解决方案我已经在问题的编辑1中分享了。
对于问题-1,即从等高线图中删除IsoLines,我应该将初始数据块保留在cont.dat
个文件中,其中包含等值线的数据。相反,我应该从数据块250开始绘制(由于set isosample 250,250
命令,前250个数据块来自IsoLines)。