【问题标题】:Smoothing out contourplot in Gnuplot?在 Gnuplot 中平滑轮廓图?
【发布时间】:2014-07-23 17:26:59
【问题描述】:

我正在尝试使用以下代码为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. 轮廓线不太平滑。我怎样才能提高那里的平滑度?

我觉得以上两个问题都有联系,但不知道如何。您能帮我理解并希望消除这些问题吗?

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

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

【问题讨论】:

    标签: gnuplot contour


    【解决方案1】:

    以下是仅绘制等高线的方法:您必须使用仅绘制等高线的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):

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-08-23
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 2013-12-22
        • 2016-09-01
        相关资源
        最近更新 更多