用gnuplot绘制表面,但是我只有一个Z数据数据文件

时间:2019-10-09 17:00:15

标签: gnuplot

我有一个包含z值(m x n = 2068 x 100)的数据文件,但是我没有找到一种方法在其中制作gnuplot中的曲面图。 在MATLAB中,该命令非常简单:只需surf(M)

这些值对应于随时间从光谱仪读出的读数,即

wavelength scan1   scan2     scan3     scan4
772.7    3.9609    3.9623    3.9593    3.9643
772.8    2.4688    2.4749    2.4669    2.4689
772.9    2.7233    2.7250    2.7240    2.7270

我知道gnuplot希望数据以x,y,z的方式显示,但是我的数据没有提供。很抱歉,我找不到其他方式来描述我所追求的... 本质上:x值位于第一行,但y值应为的索引(如果有意义)。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的数据格式介于gnuplot知道的两种格式之间。 splot $DATA matrix将所有值都视为z值(未指定x或y)。 splot $DATA matrix nonuniform期望第一列包含y值,第一行包含x值。您只有一列坐标数据,但没有一行坐标数据。

您的x值看起来是均匀分布的,因此它将产生一个有效的表面来忽略它们:

splot 'matrix.dat' matrix skip 1 every 1::1
  • matrix告诉gnuplot它是z值的数组
  • skip 1告诉它跳过第一行,该行包含标签而不是z
  • every 1::1告诉它读取从第1列开始的每一列(即跳过第0列)

enter image description here

但是,更好的方法是为每次扫描绘制一条单独的线,而不是尝试将其视为表面:

set ylabel "Scan" offset 5
set xlabel "Wavelength" offset 0,-2
set xtics .1 offset 0,-1
unset ytics
unset ztics
splot for [col=2:*] 'matrix.dat' using 1:(col):col title columnhead

enter image description here