我试图使用datetick函数绘制一些数据,首先使用datenum来解析一些数据。以下是我试图阅读的一些数据:
0, 6/23/2015 12:21:590 PM, 93.161, 95.911,94.515,95.917, -5511.105,94.324,-1415.849,2.376,2.479
1, 6/23/2015 12:22:02 PM, 97.514, 96.068,94.727,96.138,-12500.000,94.540,-8094.912,2.386,2.479
我尝试以下代码:
fileID = fopen('070915.csv');
C = textscan(fileID,'%f %s %f %f %f %f %f %f %f %f','Delimiter',',','headerLines', 9);
fclose(fileID);
formatIn = 'mm/dd/yyyy HH:MM:SS.FFF PM';
m = datenum(C{2},formatIn)
figure('Position',[0,0,1000,1000])
h1 = plot(m,C{5},'b');
datetick (formatIn);
我收到以下错误:
error: datevec: DATE not parsed correctly with given format
error: called from
datevec at line 147 column 11
datenum at line 104 column 40
plotwithdate at line 18 column 3
我可以通过使用以下内容从时间和上午/下午分离月/日/年来获得日期部分工作:
fileID = fopen('070915.csv');
C = textscan(fileID,'%f %s %s %s %f %f %f %f %f %f %f %f','Delimiter',', ','headerLines', 9);
fclose(fileID);
m = datenum(C{2},'mm/dd/yyyy')
n = datenum(C{3},'HH:MM:SS.FFF')
o = datenum(C{4},'AM')
给出了m,n和o每行的7xxxxx数。所以语法看起来还不错,直到我一起尝试它们。
答案 0 :(得分:2)
代码有两个问题。
首先,您的格式字符串与列数不匹配。你需要额外的%f
。按照目前的情况,您的代码会生成:
C{2}
ans =
{
[1,1] = 6/23/2015 12:21:590 PM
[2,1] = 1
[3,1] = 2.479
}
因此,首先要解决的问题是在textread格式字符串中添加额外的%f
:
C = textscan(fileID,'%f %s %f %f %f %f %f %f %f %f %f','Delimiter',',','headerLines', 9);
产生:
C{2}
ans =
{
[1,1] = 6/23/2015 12:21:590 PM
[2,1] = 6/23/2015 12:22:02 PM
}
现在,您接下来会注意到12:21:590
是错误的。我假设这只是你的例子中的一个错字。但是将其设置为12:21:59
仍会留下问题。
您已指定了小数秒的格式,但您的数据不包含小数秒。由于这个原因,Octave会抛出一个错误。如果您指定.FFF
,即使数据只是.0
,您的数据也需要包含它。
最后,即使您向数据添加小数秒,Octave仍会抛出错误。但是,这不是你的错。只要同时使用.FFF
和PM
符号,Octave就会出现错误。 E.g:
>> datevec('06/01/2015 3:07:12 PM','mm/dd/yyyy HH:MM:SS PM')
ans =
2015 6 1 15 7 12
>> datevec('06/01/2015 3:07:12.123','mm/dd/yyyy HH:MM:SS.FFF')
ans =
2015.0000 6.0000 1.0000 3.0000 7.0000 12.1230
>> datevec('06/01/2015 3:07:12.123 PM','mm/dd/yyyy HH:MM:SS.FFF PM')
error: datevec: DATE not parsed correctly with given format
error: called from
datevec at line 147 column 11
此问题在bug report到Octave中有所涉及。目前有一个更正版本的函数datevec.m文件附加到该错误报告。根据该页面上的信息,更正后的功能将在发布时成为Octave 4.0.1的一部分。在此期间,您可以下载并使用更正后的版本来正确处理您的数据。
或者,如果您可以控制源数据格式,则可以删除.FFF
指示符(看起来您的数据可能不需要它),或者删除PM
,它会工作
更新:上述错误已修补并关闭。超过4.0.1的Octave版本将不再出现此问题。