带日期的情节出错

Plot with dates goes wrong

我 运行 遇到了这个问题:当我在没有 x 值的 Octave 中绘图时,没问题。当我添加 x 值(应该是日期,但我没有强加日期格式)时,它变得很奇怪

ab = rand(96,1);
close all
figure
plot(ab)

给出这个数字:

close all
figure
plot(datenum('01-Nov-2020 00:00','dd-mmm-yyyy HH:MM'):1/24/4:datenum('01-Nov-2020 23:45','dd-mmm-yyyy HH:MM'),ab)

给出这个数字: 可以看到,x值都在1天之内,所以我什至不知道为什么x刻度显示超过1天...

谁能给出一个巧妙的解释?

编辑: 作为 ,这是一个 "OpenGL 无法处理将小数字添加到大数字时所涉及的精度的问题数.


在我看来,这“只是”一个 Octave 错误,MATLAB(使用 MATLAB Online 测试)没有显示出这种行为。看起来,当实际 x 值相对较高时,Octave 在 x 间隔较小时存在问题,参见

subplot(2, 1, 1);
x = linspace(800000, 800000 + 2*pi, 100);
y = sin(x);
plot(x, y);

subplot(2, 1, 2);
x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y);

对应的输出为:

似乎,一些 x 值正在“合并”!?我没有深入搜索有关该问题的已报告错误...

但是,要解决您的问题,您可以尝试从 0 开始绘制数据,然后调整 xticklabels:

% Data
ab = rand(96, 1);

figure(1);

% Plot without dates
subplot(3, 1, 1);
plot(ab);
xlim([1, 96]);

% Plot with dates (standard, faulty)
subplot(3, 1, 2);
dates = linspace(datenum('01-Nov-2020 00:00', 'dd-mmm-yyyy HH:MM'), 
                 datenum('01-Nov-2020 23:45', 'dd-mmm-yyyy HH:MM'), 
                 size(ab, 1))
plot(dates, ab);
datetick('x', 'dd-mm-yyyy HH:MM');
xlim([dates(1), dates(end)]);

% Plot with dates (custom, correct)
subplot(3, 1, 3);
# For plotting, subtract start date
dates_for_plot = dates - datenum('01-Nov-2020 00:00', 'dd-mmm-yyyy HH:MM')
plot(dates_for_plot, ab);
datetick('x', 'dd-mm-yyyy HH:MM');
# Add custom xticklabels with re-added start date
xlim([dates_for_plot(1), dates_for_plot(end)]);
xticklabels(cellstr(datestr(xticks + datenum('01-Nov-2020 00:00', 
                                             'dd-mmm-yyyy HH:MM'))));

这就是输出: