如何防止八度音在csvread中将空白条目作为零?

时间:2019-10-13 06:10:07

标签: plot octave

我有一个包含许多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)中有一个我不想要的数据点。enter image description here

1 个答案:

答案 0 :(得分:2)

如果查看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,"*") 

plot with blanks as NaN