在 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 文件绘图的主要内容,如果未能解决你的问题,请参考以下文章