带日期的情节出错
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'))));
这就是输出:
我 运行 遇到了这个问题:当我在没有 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)
给出这个数字:
谁能给出一个巧妙的解释?
编辑: 作为
在我看来,这“只是”一个 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'))));
这就是输出: