Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何在MATLAB中在同一轴上绘制不同长度的向量?_File_Matlab_Timestamp - Fatal编程技术网

File 如何在MATLAB中在同一轴上绘制不同长度的向量?

File 如何在MATLAB中在同一轴上绘制不同长度的向量?,file,matlab,timestamp,File,Matlab,Timestamp,我在比较和绘制两个不同长度的文件时遇到了麻烦。在MATLAB中,我不知道如何在同一个x轴上绘制两个不同长度的向量。由于一个文件缺少一些数据,我想创建一行并为相应的时间戳留出空白。以下是数据文件的示例: 文件1: 文件2: 我正在尝试按如下方式重新制作文件1: 8/16/2009 0:00, 516.900024, 450.5, 465.200012, 546.799988, 539.700012 8/16/2009 0:10, 351.200012, 398.899994, 418.1

我在比较和绘制两个不同长度的文件时遇到了麻烦。在MATLAB中,我不知道如何在同一个x轴上绘制两个不同长度的向量。由于一个文件缺少一些数据,我想创建一行并为相应的时间戳留出空白。以下是数据文件的示例:

文件1:

文件2:

我正在尝试按如下方式重新制作文件1:

8/16/2009 0:00, 516.900024, 450.5,      465.200012, 546.799988, 539.700012
8/16/2009 0:10, 351.200012, 398.899994, 418.100006, 510.299988, 518.5
8/16/2009 0:20, ,,,,
8/16/2009 0:30, 241.399994, 252.399994, 256,        360.600006, 386.5
8/16/2009 0:40, ,,,,
8/16/2009 0:50, ,,,,
8/16/2009 1:00, 184.199997, 154.300003, 143.899994, 236.600006, 244.399994
8/16/2009 1:10, ,,,,
newData = nan(size(fileData2));      %# New file 1 data, initialized to NaN
t = fileData2(:,1);                  %# Use the time-stamps from file 1
index = ismember(t,fileData1(:,1));  %# Find row indices of common time-stamps
newData(:,1) = t;                    %# Copy time-stamps
newData(index,:) = fileData1;        %# Copy data
有办法做到这一点吗?这将帮助我很多,因为我正试图连接2个文件的时间戳的基础上


p、 s:我试图使用MATLAB中的
ismember
函数,但遇到了各种各样的问题。

我假设您是第一次从文件中读取数据,如中所述。如果有时间戳(使用转换)和变量
fileData1
fileData2
中存储的两个文件中的数据,以下是在同一组轴上绘制每个文件数据的简单方法(使用函数和命令):

上图中的每一行都有不同数量的时间点(即圆圈标记),但每一行都是一条连续的(即不间断的)线。如果要在绘图中显示缺少时间戳的断点,可以使用值填充文件1中的数据。如果您确信较小文件中没有不在较大文件中的时间戳(即较小文件中的时间戳是较大文件中时间戳的子集),则可以使用以下功能:

8/16/2009 0:00, 516.900024, 450.5,      465.200012, 546.799988, 539.700012
8/16/2009 0:10, 351.200012, 398.899994, 418.100006, 510.299988, 518.5
8/16/2009 0:20, ,,,,
8/16/2009 0:30, 241.399994, 252.399994, 256,        360.600006, 386.5
8/16/2009 0:40, ,,,,
8/16/2009 0:50, ,,,,
8/16/2009 1:00, 184.199997, 154.300003, 143.899994, 236.600006, 244.399994
8/16/2009 1:10, ,,,,
newData = nan(size(fileData2));      %# New file 1 data, initialized to NaN
t = fileData2(:,1);                  %# Use the time-stamps from file 1
index = ismember(t,fileData1(:,1));  %# Find row indices of common time-stamps
newData(:,1) = t;                    %# Copy time-stamps
newData(index,:) = fileData1;        %# Copy data
如果较小文件中的时间戳不在较大文件中,则必须使用基于函数的解决方案(如中所示)

现在,您可以使用以下方法绘制数据:

d1 = newData(:,2);            %# First column of padded data for file 1
d2 = fileData2(:,2);          %# First column of data for file 2
plot(t,d1,'ro-',t,d2,'bo-');  %# Plot both lines
下面是NaN填充在打印时产生的差异示例(使用一些随机生成的数据):


非常感谢,正如您在我的另一个问题中所看到的,我花了很多时间来解决上述问题。@gnoice:有没有办法绘制单元格格式的矩阵?通常我使用>绘图(x,y)x=数据(:,1);y=数据(:,2);当数据位于单元格中时,如何执行相同操作?我试过cellplot,没用。还尝试了x=cell2mat(数据(:,1));也不起作用。@AP:这取决于变量
数据的外观。它是一个N×2单元阵列,每个单元有一个数字吗?或者它是一个1×2单元阵列,其中每个单元包含一个N×1向量?第一种情况可以这样处理:
plot([data{,1}],[data{,2}])plot(data{1},data{2})
没有关于
数据的更多细节,这是我能回答的最好的问题。@gnoice:这是一个N,M矩阵,我通过编写一个xls文件并将其重新读取为data=xlswrite(“”);这似乎是一种迂回的做法。使用这两个命令中的任何一个,它都会给出相同的错误“第一个数据参数无效”@AP:ahhh,我现在知道了。问题可能是您的单元格数组
文件的顶行中有字符串。这些字符串导致了您得到的错误。必须仅拾取其中包含数值的单元格进行打印。如果您的字符串仅位于
文件的顶行
,则应该可以:
绘图([file{2:end,1}],[file{2:end,2}])
d1 = newData(:,2);            %# First column of padded data for file 1
d2 = fileData2(:,2);          %# First column of data for file 2
plot(t,d1,'ro-',t,d2,'bo-');  %# Plot both lines