首页 > 解决方案 > 3D 图上的轮廓,两个不同的数据 zrange

问题描述

我想对一个数据集进行 3D 绘制,并将不同的数据集等高线绘制成一个组合图。(对于那些感兴趣的人,轮廓数据集与 3Dplot 的梯度有关)。从这里改编的代码可以正常工作,除了一个方面:如果我set zrange用来缩放我的 3D 绘图,轮廓就会消失。Autoranged 3Dplot 看起来不太好,虽然轮廓看起来不错,这就是我想应用自定义范围的原因。我怀疑这个问题也与轮廓的范围有关,以一种不留下轮廓的方式。但是我对 Gnuplot 的经验还不够,无法确定是否真的如此,或者如何解决问题。

这段代码...

    reset
    set ztics 5
    #set zrange [10 : 25] #nowriteback
    set view 135,60
    set contour base #surface
    set cntrlabel font ",7"
    set datafile missing "NaN"
    set clabel
    
    set cntrparam levels discrete 0.3, 0.4, 0.6, 1.0, 1.5
    splot 'out011_Io.txt' nonuniform matrix with lines notitle nocontour, \
    'out011_FlxN.txt' nonuniform matrix with lines title "{/Symbol F}_{N}" enhanced nosurface

...创建此图:轮廓正常的过度扁平 3D 图

在激活 zrange 时...

reset
set ztics 5
set zrange [10 : 25] #nowriteback
set view 135,60
set contour base #surface
set cntrlabel font ",7"
set datafile missing "NaN"
set clabel

set cntrparam levels discrete 0.3, 0.4, 0.6, 1.0, 1.5
splot 'out011_Io.txt' nonuniform matrix with lines notitle nocontour, \
'out011_FlxN.txt' nonuniform matrix with lines title "{/Symbol F}_{N}" enhanced nosurface

...创建此图:良好的 3D 图,没有可见的轮廓。

在此处输入图像描述

原始数据可以在这里找到:out011_FlxN.txtout011_Io.txt

来自更多知识渊博的建议受到高度赞赏。

标签: gnuplot

解决方案


如果选中help contour,gnuplot 会提供绘制轮廓的选项

set contour {base | surface | both}

不幸的是,不是您要求的自定义级别。因此,我对解决方法的建议如下:

  1. 将数据和轮廓绘制到表格中,例如 datablock $Cont。该数据块将包含数据和轮廓线(在您的情况下为 5)以及由 2 条空线分隔的每个子块。
  2. 未设置的轮廓
  3. plot $Cont,但除了第一个块。在您的情况下,通过index 1:5.

解释:

for [i=1:LevelCount] $Cont u 1:2:(10):(column(-2)) index i w l lc var ti columnhead(3) 

使用由伪列确定的可变颜色$Cont在恒定 z 水平上绘制块 1 到 5,并作为 keytitle。显然,在您的情况下,只有 4 条等高线,即在.(10)lc var(column(-2))columnhead(3)0.3

代码:

### contour plot at custom level
reset session

set contour base
set cntrparam levels discrete 0.3, 0.4, 0.6, 1.0, 1.5
set table $Cont
    splot "out011_FlxN2.txt" nonuniform matrix
unset table
unset contour
 
set key at screen 0.16, screen 1 title "{/Symbol F}_{N}"
set view 135,60
set xyplane relative 0
LevelCount = 5

splot "out011_Io.txt" nonuniform matrix w l notitle, \
      for [i=1:LevelCount] $Cont u 1:2:(10):(column(-2)) index i w l lc var ti columnhead(3) 
### end of code

结果:

在此处输入图像描述


推荐阅读