octave中datetick的意外行为

时间:2016-12-29 09:42:48

标签: plot octave

以下代码应显示从startDate=datenum('2016-01-01');endDate=datenum('2016-12-31');的数据:

data=[ 7.3633e+05,     3460.4;
  7.3635e+05,     3119.7;
   7.364e+05,     2777.9;
  7.3642e+05,     2202.6;
  7.3649e+05,     569.57;
  7.3656e+05,      403.1;
  7.3658e+05,      789.5;
  7.3664e+05,     2242.1;
  7.3668e+05,     3120.6 ]

startDate=datenum('2016-01-01');
endDate=datenum('2016-12-31');

xData = linspace(startDate,endDate,12)
plot(data(:,1),data(:,2));

ax = gca;
set (ax, 'xtick',xData);
datetick (29, 'x');

但是datetick似乎忽略了xData中的值,如下图所示。在我看来,它应该显示2016-01-01至2016-12-31范围内的日期。 datetick problem

1 个答案:

答案 0 :(得分:1)

问题在于您已切换datetick的前两个输入。正如您所写,Octave将读取第一个输入29,并将其用作格式(如您所料);但是,格式规范之后的任何尾随输入都用于indicate the start date to use(而不是依赖于刻度值本身)。这似乎是故意undocumented behavior

datestr(double('x'), 29)
%   0000-04-29

要获得预期的行为,you need to flip the order of the two inputs作为轴规范('x')应首先出现。

datetick('x', 29)

enter image description here

此外,如果您想准确指定xticks的位置,您将需要使用"keepticks"选项。

datetick('x', 29, 'keepticks')