3

我正在尝试使用以下代码为Himmelblau 的函数绘制一个简单的等高线图(在 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

我得到以下绘图结果: 结果.img

我希望消除的情节有一些问题:

  1. 它在图中显示了一些水平线,我不知道为什么。如何删除水平线?
  2. 轮廓线不太平滑。我怎样才能提高那里的平滑度?

我觉得上述两个问题都有联系,但无法弄清楚如何。您能帮我理解并希望消除这些问题吗?

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

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

4

2 回答 2

3

以下是仅绘制等高线的方法:您必须使用unset surface仅绘制等高线的 ,并使用 从上方查看图set view map。另请参阅 gnuplot 演示中的2D 等高线投影图

平滑可以使用 来实现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):

在此处输入图像描述

于 2013-10-16T20:44:58.607 回答
0

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

对于问题 1,即从等值线图中删除等值线,我应该将初始数据块留在cont.dat包含等值线数据的文件中。相反,我应该从数据块 250 开始绘制(前 250 个数据块来自 IsoLines,因为set isosample 250,250命令)。

于 2013-10-16T15:23:03.853 回答