我有一个包含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值应为列的索引(如果有意义)。
任何帮助将不胜感激。
答案 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列)但是,更好的方法是为每次扫描绘制一条单独的线,而不是尝试将其视为表面:
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