【问题标题】:Gnuplot: 3d surface from discrete dataGnuplot:来自离散数据的 3d 表面
【发布时间】:2014-05-02 10:57:27
【问题描述】:

我需要绘制一个离散 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 图。

有人可以帮帮我吗?

【问题讨论】:

    标签: image 3d gnuplot geometry-surface


    【解决方案1】:

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

    x0 y0 z00
    x0 y1 z01
    ....
    x0 yN z0N
    
    x1 y0 z10
    x1 y1 z11
    ...
    x1 yN z1N
    

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

    【讨论】:

    • 在使用 GNU 的 3D 绘图之前必须以这种方式组织原始数据,这一定很耗时且乏味?有什么建议可以有效地组织原始数据以匹配 GNU 中的 splot 选项吗?
    • 为什么会很乏味?通常你有一些程序可以生成你的数据,将数组映射到这种格式非常简单。而且 gnuplot(不是 GNU!)还支持其他文件格式,请参阅文档中的 matrixmatrix nonuniform (gnuplot: 3D plot of a matrix of data)。您可以读取二进制数组,或使用像hdf5 这样的二进制格式来保存您的数组,并使用h5totxt 以合适的格式提取它们。大部分建议取决于您的数据量、数据源和网格格式(统一与否)。
    【解决方案2】:

    以下将采用超过 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,如果前一行是第一个字段与当前字段不同。

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      相关资源
      最近更新 更多