问题描述
我想使用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线。当我使用绘图时,我没有任何问题。
gnuplot> plot 'allaxi80.005.dat' u 2:1 w l,'' u 2:(-$1) w l
现在我希望使用散点图进行相同的操作,但是如您所见,我得到了不同的曲线。
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
然后,我知道自己的数据是2D的,因此我未设置视图地图。
unset view
我明白了:
@L_502_2@
我使用:
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坐标,这基本上是从零开始的行号。选中help pseudocolumns
。
您的代码应如下所示。注意0
中的(0)
,这意味着0
的常数(不是行号)。
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
添加 :(在更详细地查看了完整数据之后)
这是解决您问题的最小示例。
- 您的数据在第2列(此处为第1列)中不是单调的
- 您不会在
plot
中看到此内容,因为每两行数据之后就有一个空行。因此,线路将不会连接。但是splot
将在只有一个空行的情况下连接数据点。
您可以选择:
- 通过代表x的列对数据进行排序
或
- 代替两个空行代替一个空行,它也可以与
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
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中的第一列功能排序为第二列,只需执行以下操作:
splot '< sort -u -k1,1 file.dat | sort -k2,2'