【问题标题】:How to prevent octave taking blank entries as zeroes in csvread?如何防止 octave 在 csvread 中将空白条目设为零?
【发布时间】:2019-10-13 06:10:07
【问题描述】:

我有一个包含许多 x 和 y 列的 csv 文件,我想将它们绘制在一个图表中。但是不同列中的数据点数量不同,这些空白值在 CSV 文件中用逗号表示,而 Octave 将它们视为(零,零)。

如何忽略空格?

这是这样一个CSV文件(列代表x1,y1,x2,y2)

0.59,0.09,1.12,0.106
0.23,0.09,0.88,0.104
,,0.02,0.105

这是八度代码

function getdata()
M = csvread("filename.csv");
x1 = M(:,1);
y1 = M(:,2);
x2 = M(:,3);
y2 = M(:,4);
figure 1;
plot(x1,y1, "or", x2,y2, "*")

这是我得到的情节。注意,(0,0)中有一个数据点,我不想要。

【问题讨论】:

  • 您应该发布一些示例 CSV 行,显示您的代码和结果以及想要的结果

标签: plot octave


【解决方案1】:

如果您查看csvread 的帮助,您会发现它只是dlmread 的包装器。

这个函数相当于

X = dlmread (FILENAME, "," , DLM_OPT1, ...)

任何可选参数都直接传递给“dlmread”

dlmread 帮助描述了一个可选参数'emptyvalue',允许您指定对文件中的空条目执行的操作。

-- DATA = dlmread (FILE, SEP, RANGE)
-- DATA = dlmread (..., "emptyvalue", EMPTYVAL)

...

“emptyvalue”选项可用于指定用于 填写空白字段。默认为零。请注意,任何非数字 值,例如文本,也被“空值”替换。

使用此参数,您可以插入任何您想要的数值。这包括 Inf 和 NaN 等值,如果这是您想要做的,您可以使用它们在绘图之前过滤掉数据。

>> dlmread('testdata.dat')
ans =

   0.59000   0.09000   1.12000   0.10600
   0.23000   0.09000   0.88000   0.10400
   0.00000   0.00000   0.02000   0.10500

>> dlmread('testdata.dat','emptyvalue',999)
ans =

     0.590000     0.090000     1.120000     0.106000
     0.230000     0.090000     0.880000     0.104000
   999.000000   999.000000     0.020000     0.105000

>> dlmread('testdata.dat','emptyvalue',inf)
ans =

   0.590000   0.090000   1.120000   0.106000
   0.230000   0.090000   0.880000   0.104000
        Inf        Inf   0.020000   0.105000

>> dlmread('testdata.dat','emptyvalue',nan)
ans =

   0.590000   0.090000   1.120000   0.106000
   0.230000   0.090000   0.880000   0.104000
        NaN        NaN   0.020000   0.105000

似乎 plot 命令将忽略 NaN 和 inf。为此,我建议使用 NaN。

>> M = dlmread('testdata.dat','emptyvalue',nan)
M =

   0.590000   0.090000   1.120000   0.106000
   0.230000   0.090000   0.880000   0.104000
        NaN        NaN   0.020000   0.105000

>> x1 = M(:,1); y1 = M(:,2); x2 = M(:,3); y2 = M(:,4);
>> plot(x1,y1,"or", x2,y2,"*") 

【讨论】:

  • Inf 和 NaN 在图中是不同的。如果您使用连接点的线进行绘图,您可以看到差异。根本没有绘制 NaN,从而在该行中产生间隙。 Inf 被绘制在无穷远处,使线上升和超出情节。
猜你喜欢
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多