Plot 如何防止八度音程在csvread中将空白项作为零?

Plot 如何防止八度音程在csvread中将空白项作为零?,plot,octave,Plot,Octave,我有一个csv文件,其中包含许多x和y列,我想在单个图形中绘制这些列。但是,不同列中的数据点数量不同,这些空白值在CSV文件中用逗号表示,并且倍频程将它们取为(零,零) 如何忽略空白 这就是这样一个CSV文件(列表示x1、y1、x2、y2) 这是八度代码 function getdata() M = csvread("filename.csv"); x1 = M(:,1); y1 = M(:,2); x2 = M(:,3); y2 = M(:,4); figure 1; plot(x1,y1,

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

如何忽略空白

这就是这样一个CSV文件(列表示x1、y1、x2、y2)

这是八度代码

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)中有一个我不想要的数据点。

如果您查看
csvread
的帮助,您将看到它只是
dlmread
的包装

此函数相当于

X = dlmread (FILENAME, "," , DLM_OPT1, ...)
任何可选参数都直接传递给“dlmread”

dlmread
帮助描述了一个可选参数
'emptyvalue'
,该参数允许您指定如何处理文件中的空条目

“emptyvalue”选项可用于指定用于 填充空字段。默认值为零。请注意,任何非数字 文本等值也被“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,"*") 

相反,您应该发布一些示例CSV行,显示您的代码和结果,并且想要的结果F和NaN在绘图中是不同的。如果使用连接点的直线进行打印,则可以看到差异。根本不绘制NaN,在直线上形成一个间隙。Inf在无穷远处绘制,使线向上并离开绘图。
>> 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
>> 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,"*")