在 Octave 中从 .dat 文件绘图

Posted

技术标签:

【中文标题】在 Octave 中从 .dat 文件绘图【英文标题】:Plotting from .dat file in Octave 【发布时间】:2014-10-02 11:30:30 【问题描述】:

我正在运行一个将多组数据输出到一个 .dat 文件的 Fortran 代码。我想使用 Octave 绘制两列中的数据。比如我要绘制的数据是这样的形式:

      t              Eta(t)
     0.00           -0.748
     0.50           -0.773
     1.00           -0.774
     1.50           -0.535
     2.00           -0.120
     2.50            0.131
     3.00            0.184
     3.50            0.211
     4.00            0.068
     4.50           -0.110

数据从第 148 行开始(不包括 t 和 eta(t) 行)并一直持续到第 247 行。t 和 eta(t) 的数据显然跨越了几列(根据文本文件,那就是我从中读取行号和列号的地方)。如果数据是这种形式,有没有办法通过指定从哪一行开始或任何东西来绘制数据?简而言之,我想绘制它,以便 t 列中的值位于 x 轴上,而 eta(t) 值位于 y 轴上。提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

textread 的很多 faster 替代品(请参阅安迪的回答)是 dlmread

filename = "yourfile.dat";
# empty separator means 'automatic'
separator = '';
skipped_rows = 147;
skipped_columns = 0;
m = dlmread(filename, separator, skipped_rows, skipped_columns);
t = m(:,1);
eta_ = m(:, 2);
plot(t, eta_)

如果要在第 248 行之后停止读取文件,请使用

filename = "yourfile.dat";
# empty separator means 'automatic'
separator = '';
skipped_rows = 147;
skipped_columns = 0;
last_row = 248
last_column = 2
m = dlmread(filename, separator, 
            [skipped_rows, skipped_columns, last_row-1, last_column-1]);
t = m(:,1);
eta_ = m(:, 2);
plot(t, eta_)

【讨论】:

谢谢你,我认为这对我来说更有意义。我实际上已经设法将它作为矩阵再次输出,因此数据从 .dat 文件的第一行开始,我想绘制第 1 列与第 2 列(然后最终第 1 列与第 3-6 列) .我猜我可以使用相同的格式,但不需要skipped_rows 和skipped_columns。我理解正确吗?我现在正在阅读有关 dlmread 的更多信息,因此希望它会更清晰一些。 @user3306583 是的,就是这样。【参考方案2】:

使用文本阅读。您想跳过 147 行(标题行)并阅读 247-147 = 100 行

[t,eta] = textread ("yourfile.dat", "%f %f", 100, "headerlines", 147)

这将返回 2 列向量“t”和“eta”以及您的数据。在此之后,您可以绘制它们

plot (t, eta)

您的 .dat 在线可用还是可以上传?

【讨论】:

只是查找 textread 并不太明白。。这个命令会读到有两列,而我需要的值被分成这两列吗?

以上是关于在 Octave 中从 .dat 文件绘图的主要内容,如果未能解决你的问题,请参考以下文章

在 Octave 中保存复杂绘图时遇到问题

Octave Tutorial(《Machine Learning》)之第二课《数据移动》

Octave 仅打印最后绘制的线段

关于mac下octave的绘图问题

关于mac下octave的绘图问题

通过将数字分组到一个范围内在 matlab / octave 中绘图