我正在运行一个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栏'?有人对此有经验吗?
提前致谢!
答案 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)。