如何使用gnuplot在pm3d地图上添加二维曲线非单调数据

如何使用gnuplot在pm3d地图上添加二维曲线非单调数据,gnuplot,Gnuplot,我想使用splot并在我的pm3d地图上添加2D曲线。所以我使用这个代码,它几乎可以工作 我的2D线有问题 splot 'gnu8' u 2:1:3 w pm3d notitle,\ '' u 2:(-$1):3 w pm3d notitle,\ 'allaxi80.005.dat' u 2:1:0 w l lw 3 lc "black" notitle,\ '' u 2:(-$1):0 w l lw 3 lc "black" notitle

我想使用splot并在我的pm3d地图上添加2D曲线。所以我使用这个代码,它几乎可以工作

我的2D线有问题

splot 'gnu8' u 2:1:3 w pm3d notitle,\
  '' u 2:(-$1):3 w pm3d notitle,\
  'allaxi80.005.dat' u 2:1:0 w l lw 3 lc "black" notitle,\
  '' u 2:(-$1):0 w l lw 3 lc "black" notitle
这是我的2D线。当我使用plot时,我没有任何问题

gnuplot> plot 'allaxi80.005.dat' u 2:1 w l, '' u 2:(-$1) w l

现在我想用splot做同样的事情,但是你可以看到,我得到了一条不同的曲线

gnuplot> splot 'allaxi80.005.dat' u 2:1:0 w l lw 3 lc "black" notitle,\
>      '' u 2:(-$1):0 w l lw 3 lc "black" notitle

然后我取消设置视图地图,知道我的数据是二维的

unset view
我明白了:

我使用:

G N U P L O T
Version 5.2 patchlevel 2
我的数据文件的一部分:

0 32.0109
0.3125 32.0379

0.3125 32.0376
0.625 32.119

0.625 32.1221
0.78125 32.1835

0.78125 32.1837
0.788924 32.1875

0.790724 32.1875
0.9375 32.2602

0.9375 32.26
0.947399 32.2656

0.945217 32.2656
1.01562 32.3064

1.01562 32.3066
1.07344 32.3438

1.07505 32.3438
1.09375 32.3552

1.09375 32.3554
1.25 32.4697

1.25 32.4708
1.28557 32.5

1.287 32.5
1.40625 32.6034

1.40625 32.6065
1.45767 32.6562

1.46141 32.6562
1.5625 32.7658

1.5625 32.7667
1.60196 32.8125

1.60243 32.8125
1.64062 32.8601

1.64062 32.8613
1.66339 32.8906

1.66505 32.8906
1.71875 32.9636

1.71875 32.9672
1.71984 32.9688

1.7216 32.9688
1.77482 33.0469

1.77503 33.0469
1.79688 33.0805

1.79688 33.0813
1.82527 33.125

1.82647 33.125
1.875 33.2065

1.875 33.2084
1.91838 33.2812

1.91899 33.2812
2.00165 33.4375

2.00201 33.4375
2.03125 33.5005

2.03125 33.5023
2.07369 33.5938

2.07384 33.5938
2.13673 33.75

2.13802 33.75
2.1875 33.9013

2.1875 33.9033
2.18852 33.9062

2.18935 33.9062
2.23597 34.0625

2.23618 34.0625
2.27742 34.2188

2.2774 34.2188
2.31287 34.375

2.3128 34.375
2.34271 34.5312

2.3428 34.5312
2.34375 34.5373

2.34375 34.5384
2.36727 34.6875

2.36713 34.6875
2.38697 34.8438

2.38683 34.8438
2.40246 35

2.40242 35
2.41423 35.1562

2.41422 35.1562
2.42229 35.3125

2.42226 35.3125
2.42668 35.4688

2.42665 35.4688
2.42753 35.625

2.42754 35.625
2.42493 35.7812

2.42491 35.7812
2.41881 35.9375
我的整个文件:


事实上,数据总是有用的,因为在绘制数据后,我看到了问题所在。 在代码中,它将伪列0作为z坐标,这基本上是从零开始的行号。检查
帮助伪列

您的代码应该是这样读的。注意
(0)
中的
0
,这意味着
0
的常量值(不是行号)

添加:(详细查看完整数据后)

这是你的问题的一个小例子

  • 第2列(此处为第1列)中的数据不是单调的
  • plot
    中,您将看不到这一点,因为每两个数据行后面都有一个空行。因此,这些线路将无法连接。但是如果只有一条空行,
    splot
    将连接数据点
您可以选择:

  • 按代表x的列对数据进行排序
  • 添加两个空行,而不是一个空行,然后它还将与
    splot
    一起使用
  • 代码:(编辑:与您的数据更相似的数据)

    ####使用非单调数据进行绘图和splot
    重置会话
    
    $Data0要将gnuplot中的第一列函数排序为第二列,只需执行以下操作:

    splot '< sort -u -k1,1 file.dat | sort -k2,2'
    
    splot'
    这些信息不足以轻松再现您的问题。你能展示一下你的数据或者至少几行例子吗?是否有特殊字符、逗号作为小数分隔符、区域设置等?我编辑我的帖子。我没有特别的角色…很抱歉,它不起作用。我尝试使用(0),但我遇到了相同的问题嗯。。。。它不能是相同的输出,因为z坐标为0。然后,一些其他信息或代码丢失了…我已经放置了一个链接来获取我的所有数据。你能试试我所有的数据吗。它对你有用吗?现在使用(0)我得到:gnuplot>splot'allaxi80.005。dat'u 2:1:(0)w l lw 3,\>'u 2:($1):(0)w l lw 3 notitle警告:空z范围[0:0],调整为[-1:1],但问题没有解决,我只是注意到第2列中的数据是特殊的,不是单调的。空行使您无法通过
    绘图看到这一点,但可以通过
    splot
    看到这一点。。。a) 如果您有例如圆形类型的数据,则排序当然不起作用。b) sort是Linux中的标准工具,对于Windows,您必须安装一些额外的工具。
    ### plot and splot with non monotonic data
    reset session
    
    $Data0 <<EOD
    0 0 
    2 1
    6.3 2.3
    7 0
    1.1 0.9
    4 2
    3.9 2.3
    6 2
    EOD
    
    $Data1 <<EOD
    0 0 
    2 1
    
    6.3 2.3
    7 0
    
    1.1 0.9
    4 2
    
    3.9 2.3
    6 2
    EOD
    
    $Data2 <<EOD
    0 0 
    2 1
    
    
    6.3 2.3
    7 0
    
    
    1.1 0.9
    4 2
    
    
    3.9 2.3
    6 2
    EOD
    
    set offsets 1,1,1,1
    set multiplot layout 2,3
    
        plot $Data0 u 1:2 w lp pt 7 ti "0 empty lines"
        plot $Data1 u 1:2 w lp pt 7 ti "1 empty lines"
        plot $Data2 u 1:2 w lp pt 7 ti "2 empty lines"
    
        splot $Data0 u 1:2:(0) w lp pt 7 ti "0 empty lines"
        splot $Data1 u 1:2:(0) w lp pt 7 ti "1 empty lines"
        splot $Data2 u 1:2:(0) w lp pt 7 ti "2 empty lines"
    unset multiplot
    ### end of code
    
    splot '< sort -u -k1,1 file.dat | sort -k2,2'