Gnuplot:来自离散数据的3d表面

时间:2014-05-02 10:57:28

标签: image 3d gnuplot geometry-surface

我需要绘制离散3d函数的表面,数据是这样的:

   0.5520000      -0.3840000       0.0000001       0.0000001
   0.5520000      -0.3760000   6.5919072e-08   5.8261450e-08
   0.5520000      -0.3680000       0.0398564       0.0335707
   0.5520000      -0.3600000   2.4211279e-08   2.6520126e-08
   0.5520000      -0.3520000       0.0000002       0.0000002
   0.5520000      -0.3440000       0.1945450       0.1962598
   0.5520000      -0.3360000       0.0794571       0.0792212
   0.5520000      -0.3280000   1.3106068e-08   1.6226917e-08
   0.5520000      -0.3200000       0.3029487       0.3209866
   0.5520000      -0.3120000       0.2192498       0.2272512
   0.5520000      -0.3040000       0.2904586       0.3077338
   0.5520000      -0.2960000       0.2505561       0.2639075

...

我希望绘制1:2:3列。我尝试使用简单的gnuplot命令:

splot 'data.dat' u 1:2:3 with pm3d

但我收到以下警告信息:

Warning: Single isoline (scan) is not enough for a pm3d plot.
       Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.

输出是一个空的3d图。

有人能帮帮我吗?

2 个答案:

答案 0 :(得分:4)

就像警告信息告诉您:您的文件中缺少空白行。要与pm3d一起使用,必须按如下方式组织数据:

x0 y0 z00
x0 y1 z01
....
x0 yN z0N

x1 y0 z10
x1 y1 z11
...
x1 yN z1N

等。连续的x值之间必须有一个空行。

答案 1 :(得分:1)

以下内容将采用多于2列的输入文件,对其进行排序并在第一列更改时添加空行,即Gnuplot需要的内容:

sort -k 1,1 -k 2,2 -n infile.txt | \
awk 'BEGIN{pr=0}{if(NR>1){if($1!=pr){print ""}} pr=$1;print $0}' >outfile.txt

说明:

以数字方式(-n)首先根据第一列(-k 1,1)对输入进行排序,然后对第二列(-k 2,2)进行排序,并将结果传递给awk,这将添加如果前一行的第一个字段与当前行的字段不同,则换行。