用线绘制时的绘图行为

时间:2017-05-22 17:52:56

标签: gnuplot

我最近偶然发现了一个例子,其中Gnuplot产生(至少对我来说)一个意想不到的结果,所以我想知道它是否确实是理想的行为。设置如下:

set terminal pngcairo
set output plot3d?"plot1.png":"plot0.png"

unset key
set xtics nomirror
set ytics nomirror
set xr [0.5:2.5]
set yr [-0.5:4.5]

set multiplot layout 1,2

$data0 << EOD
1   2   1
2   4   1
1   3   1


1   0   1
2   2   1
1   1   1
EOD

$data1 << EOD
1   2   1
2   4   1
1   3   1

1   0   1
2   2   1
1   1   1
EOD


if(plot3d){
    set view map
    splot $data0 w lp, \
        '' u 1:2:3:(sprintf("%d", $0)) w labels offset char 0, char -0.5

    splot $data1 w lp, \
        '' u 1:2:3:(sprintf("%d", $0)) w labels offset char 0, char -0.5
}else{
    plot $data0 w lp, \
        '' u 1:2:(sprintf("%d", $0)) w labels offset char 0, char -0.5

    plot $data1 w lp, \
        '' u 1:2:(sprintf("%d", $0)) w labels offset char 0, char -0.5
}

两个数据块的区别仅在于空格,$data0有两个空行,而$data1只有一个。使用plot3d=1,脚本生成(5.0补丁级别6) enter image description here

有趣的是,数据块$data1中的第1点和第4点也相互连接。当空行被注释掉时,这条边似乎消失了。挖掘到绘图(plot3d=0)会产生预期结果: enter image description here

我可能遗漏了一些显而易见的东西,虽然文档似乎说明了(也许它以某种方式被splot覆盖):

  

单个空白记录指定plot中的不连续性;没有线路会加入    由空白记录分隔的点(如果用线条样式绘制)。

1 个答案:

答案 0 :(得分:1)

是的,您描述的行为对idlelib.PyShell.main()是正确的。实际上,您显示的引用明确提到splot而不是plot。对于splot行为,请参阅&#34; splot&gt;的文档。数据文件&#34;,其中说:

  

单个空白记录将splot数据文件中的数据块分开; splot将数据块视为函数y-isolines的等价物。没有行会加入由空白记录分隔的点。如果所有数据块包含相同数量的点,gnuplot将在数据块之间绘制交叉等值线,连接相应的点。这被称为&#34;网格数据&#34;,...

因此,通常,单个空行用于构造splot的网格化数据,或允许使用splot选择数据点和数据块。

两个空行总是具有相同的含义来分隔两个数据集,可以使用every选择。