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

时间:2009-10-30 03:16:37

标签: file matlab timestamp

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

文件1:

date time  T01  T02  T03  T04  T05
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:30, 241.399994, 252.399994, 256,        360.600006, 386.5
8/16/2009 1:00, 184.199997, 154.300003, 143.899994, 236.600006, 244.399994

文件2:

date time  T01  T02  T03  T04  T05
8/16/2009 0:00, 656.799988, 611.200012, 860.599976, 604.700012, 288.5
8/16/2009 0:10, 527.400024, 359.200012, 789.099976, 789.099976, 446.799988
8/16/2009 0:20, 431.5,      327.100006, 763.599976, 895.099976, 689.099976
8/16/2009 0:30, 328.399994, 301.700012, 824,       1037.099976, 955.299988
8/16/2009 0:40, 261.5,      332.200012, 811.700012, 962.200012, 915.599976
8/16/2009 0:50, 180.300003, 291.100006, 700.099976, 855.200012, 836.900024
8/16/2009 1:00, 294.399994, 281.399994, 731.299988, 881.700012, 666.200012
8/16/2009 1:10, 274.899994, 334.200012, 759.400024, 913.900024, 760.799988

我正在尝试重新制作文件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, ,,,,

有办法做到这一点吗?当我试图根据时间戳链接2个文件时,它会对我有所帮助。

p.s:我正在尝试在MATLAB中使用ismember函数,并且遇到各种各样的问题。

1 个答案:

答案 0 :(得分:2)

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

t1 = fileData1(:,1);  %# Time-stamps for file 1
d1 = fileData1(:,2);  %# First column of data for file 1
plot(t1,d1,'ro-');    %# Plot data from file 1, using a red line with circles
hold on;
t2 = fileData2(:,1);  %# Time-stamps for file 2
d2 = fileData2(:,2);  %# First column of data for file 2
plot(t2,d2,'bo-');    %# Plot data from file 2, using a blue line with circles

上图中的每一行将具有不同数量的时间点(即圆圈标记),但每一行都是连续的(即完整的)线。如果要在缺少时间戳的图中显示中断,可以使用NaN值填充文件1中的数据。如果您确定较小的文件中没有时间戳,那么不是在较大的文件中(即较小文件中的时间戳是时间戳的子集)在较大的)中,您可以使用函数ISMEMBER,如下所示:

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

如果小文件中的 时间戳不在较大的文件中,则必须使用基于INTERSECT函数的解决方案(如{ {3}})。

现在,您可以使用以下内容绘制数据:

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-padding在绘制时使用的差异示例(使用一些随机生成的数据):

alt text