如何格式化图表上的日期并消除时间差

时间:2015-11-03 21:16:57

标签: matlab

我从这个非常简单的脚本创建了以下图表。

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格式):EURUSD

如您所见,x轴是10 ^ 17格式的数字,而不是C#的System.DateTime。此外,请注意,由于市场关闭并重新开放,因此在市场收盘和重新开盘之间会有一条线连接起来。

我如何:

  1. 摆脱日期差距。我希望数据与其邻居相邻。
  2. 使x轴刻度线与日期/时间类似吗?
  3. y轴数据有五位小数的精度。如何让图表在y轴刻度线上显示更精确?

1 个答案:

答案 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正在及时弥补差距,因此情节看起来“跳跃”并断开连接。