我有一个包含许多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 :(得分: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,"*")