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

How to add 2D curve not monotonic data on pm3d map with gnuplot

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

二维线有问题

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

这是我的二维线。当我使用 plot 时,我没有任何问题。

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

现在我想要与 splot 相同的东西,但如你所见,我得到了不同的曲线。

gnuplot> splot 'allaxi80.005.dat' u 2:1:0 w l lw 3 lc "black" notitle,\
>      '' u 2:(-):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

我的整个文件:

https://github.com/Suntoryy/gnuplot/blob/master/allaxi80.005.dat

实际上,数据总是有帮助的,因为在绘制您的数据后我看到了问题所在。 对于您的代码,它将伪列 0 作为 z-coordinate,这基本上是从零开始的行号。检查 help pseudocolumns.

您的代码应如下所示。注意(0)中的0,意思是0的常量值(不是行号)。

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

加法:(在更详细地查看您的 完整 数据之后)

这是您的问题的一个最小示例。

  • 您的数据在第 2 列(这里是第 1 列)中不是单调的
  • 你不会在 plot 中看到这个,因为在每两个数据行之后有一个空行。因此,线路将不会连接。但是 splot 将在只有一个空行的情况下连接数据点。

您有以下选择:

  1. 按代表您的 x 的列对数据进行排序

  1. 而不是一个空行添加两个空行然后它也适用于 splot

代码:(编辑:数据与您的数据更相似)

### 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

结果:

要在 gnuplot 中将第 1 列函数排序为第 2 列,只需执行以下操作:

splot '< sort -u -k1,1 file.dat | sort -k2,2'