2013-10-16 38 views
3

我尝试使用下面的代码绘制的Himmelblau's function一个简单的等高线图(在gnuplot的):平滑Gnuplot中的contourplot?

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 

我碰到下面的剧情结果: result.img

有与几个问题我想要消除的情节:

  1. 它显示剧情中的一些水平线,我不知道为什么。我怎样才能删除水平线?
  2. 轮廓线不太平滑。我该如何改善平滑度?

我觉得上述两个问题都是连接的,但无法弄清楚。你能帮我理解并希望消除这些问题吗?

编辑1:我找到了问题2的答案,即提高平滑度。我可以通过增加isosample来实现。但是我仍然得到很多水平线,如下图所示。 smoother_contourlines.img

但是如何去除这些水平线?我只想要指定等级的轮廓线。

回答

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) 

随着(使用4.6.3)结果:

enter image description here

0

我能解决这两个问题。问题-2的解决方案我已经在问题的编辑1中分享了。

对于问题1,即从等值线图中除去IsoLines,我应该留下包含等值线数据的初始数据块。相反,我应该从数据块250开始绘制(由于set isosample 250,250命令,前250个数据块来自IsoLines)。