我从这个非常简单的脚本创建了以下图表。
clear;
format long g
Ts = ncread('EURUSD_1 hour_30_D_2015-11-03_02-52-36-PM.nc', 'TimeStamp');
Obs = ncread('EURUSD_1 hour_30_D_2015-11-03_02-52-36-PM.nc', 'Close');
plot(datenum(Ts), Obs);
datetick('x', 20);
然而,我收到此错误:
>> netcdfExample
Error using datevecmx
Date number out of range.
Error in datevec (line 303)
[y,mo,d] = datevecmx(t);
Error in dateTickPicker (line 85)
[y,m,d] = datevec(x);
Error in datetick>bestscale (line 292)
[labels,format] = dateTickPicker(axh,[xmin,xmax],dateform,dateChoice,axVal);
Error in datetick (line 251)
ticks = bestscale(axh,ax,vmin,vmax,dateform,dateChoice);
Error in netcdfExample (line 9)
datetick('x', 20);
>>
当我尝试像这样简单的事情时
>> formatOut = 'mmmm-dd-yyyy';
>> str = datestr(6.35821236e+17,formatOut,'local')
我收到此错误。我想知道这些编码的日期编号是否错误?
Error using dateformverify (line 28)
DATESTR failed converting date number to date vector.
Error in datestr (line 194)
S = dateformverify(dtnumber, dateformstr, islocal);
Caused by:
Error using datevecmx
Date number out of range.
日期时间/关闭看起来像这样(在.csv vesion中)
9/22/2015 16:15 1.11255
9/22/2015 17:00 1.11305
9/22/2015 18:00 1.112
9/22/2015 19:00 1.1107
9/22/2015 20:00 1.1123
日期是从我从文件读到Matlab的每小时日内数据(netcdf格式):
如您所见,x轴是10 ^ 17格式的数字,而不是C#的System.DateTime。此外,请注意,由于市场关闭并重新开放,因此在市场收盘和重新开盘之间会有一条线连接起来。
我如何:
答案 0 :(得分:0)
我想出了一个解决方法。在C#程序中,我将Datetime转换为double,而不是使用Datetime。那么这个程序工作正常
Ts = ncread('EURUSD_1 hour_30_D_2015-11-03_06-41-44-PM.nc', 'TimeStamp');
Obs = ncread('EURUSD_1 hour_30_D_2015-11-03_06-41-44-PM.nc', 'Close');
plot(Ts, Obs);
datetick('x', 'mm-dd-yy HHPM');
我仍然不知道如何为y轴添加精度,以及如何在x轴上消除时间间隙。这很有趣,因为如果我只是说
plot(Obs)
图表在y轴上看起来正确,但x轴是数字。如果我添加
plot(Ts, Obs)
datetick('x', 'mm-dd-yy HHPM');
然后x轴被日期/时间正确“索引”,但我怀疑Matlab正在及时弥补差距,因此情节看起来“跳跃”并断开连接。