在Octave中从.dat文件绘图 - 解析问题?

时间:2014-10-03 12:31:35

标签: plot octave

我正在运行一个Fortran代码,它将几组数据输出到一个.dat文件中。我想使用Octave绘制六列中的数据。例如,我想要绘制的数据采用以下形式:

  0.00000     -0.74801     -1.28157     -0.83853     -0.48516      1.63291
  0.50000     -0.77323     -1.29113     -0.05049      0.41035      1.43455
  1.00000     -0.77395     -0.92811      0.53030      0.97057      0.84562
  1.50000     -0.53535     -0.39600      0.77706      1.08468      0.14751
  2.00000     -0.11992      0.09400      0.70391      0.82753     -0.39832
  2.50000      0.13110      0.40199      0.42843      0.39346     -0.65142
  3.00000      0.18444      0.49287      0.09997     -0.01108     -0.62348
  3.50000      0.21139      0.41749     -0.16809     -0.26034     -0.43447
  4.00000      0.06769      0.26052     -0.33161     -0.34466     -0.22600
  4.50000     -0.11022      0.08786     -0.40536     -0.33917     -0.08197
  5.00000     -0.30134     -0.07872     -0.42390     -0.33216      0.00230

我试图将第2列映射到第1列(这只是数据的一个示例),然后最终将其余列映射到第1列。目前,我的Octave脚本看起来像: / p>

此脚本从数据文件中读取自由曲面的值,并根据时间绘制值

%Load text file
data = 'filename.dat';
m = dlmread(data);
t = m(:,2);
eta = m(:,3);
plot(t,eta);
title('Free surface eta(t) vs time');
xlabel('Time (s)');
ylabel('Location of free surface');
grid on

但是,我的情节是空白的。如果我滚动浏览.dat文件,它会告诉我看起来像第一列的值在第6-14列中,而值是第2列和第2列的值。实际上是在第19-27栏。这可能是情节空白的原因吗?也许它并没有将它们视为第1列和第3列中的数字。反对第2栏'?有人对此有经验吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

问题在于行m = dlmread(数据,分隔符)

如果您将分隔符指定为单个空格(如此处所示),则结果为11 x 32矩阵。 filename.dat中的一些列之间有5个空格,有些有6个,具体取决于负号。它在所有空格之间插入零。您正在绘制空白图,因为您正在绘制一列零和一列零。

根据八度文档,如果没有提供,dlmread将定义它自己的分隔符。 我的建议是像这样修改八度脚本:

m = dlmread(data); % creates an 11 x 6 matrix

我从上面复制并粘贴了您的数据。如果数据文件中第1列之前有空格,那么它将创建一个11 x 7矩阵,其中第1列为全零。如果在第一列之前有空格,请确保使用t = m(:,2)和eta = m(:,3)。