在 MATLAB 绘图中设置时间刻度

Setting time ticks in a MATLAB plot

我绘图的 x 轴应该是时间,y 轴是值。对于每个值,我都有一个以毫秒为单位的时间戳。我想在 x 轴上每隔 5 分钟打一个勾,比如 16:05、16:10、16:15 等等。值之间的时间距离不相等。

如何做到这一点?

数据向量的一个例子是(第一列时间戳,第二列值):

27634517312999, 1.1111809015274048
27658503234656, 0.7998865246772766
27662988099446  0.7806665897369385
27664499628612  0.7781039476394653
27950691973920  0.8562135696411133
27970195902662  0.8036822080612183
27973194252661  0.7908696532249451
....

我想我必须更清楚。每个值都有一个指定的绝对时间戳(以毫秒为单位),表示从 1970 年开始经过的时间(我认为)。我通过 Java 的 System.currentTimeMillis() 调用收集了这些值。例如 27658503234656 对应于 Mon Jun 18 2846 14:33:54 GMT+0100。这些值大致跨越一个小时的范围(同一年、同一天等)。这意味着第一个时间戳是 27658501657000(代表 Mon Jun 18 2846 14:07:37 GMT+0100),最后一个时间戳是 27658504995000(代表 Mon Jun 18 2846 15:03:15 GMT+0100)。在 15:03 之前,我只对 14:07 感兴趣。在我的 x 轴上,第一个标签应该位于 14:10,然后每 5 分钟应该有一个标签,即 14:15、14:20 等。最后一个标签位于 15:00 .

如何做到这一点?

使用datetick

dateFormat = 15; % 15 is HH:MM, see docs
datetick('x',dateFormat)% equivalent: datetick('x','HH:MM')

如果您需要轴上的特定边界,可以使用 xlim to set the precise boundary you require. If you also need help converting your millisecond value into a proper date, divide by 1e3, since I suspect they are already in datenum 格式。

使用 datetick 应该是简单的解决方案。如果你喜欢自己控制详细程度,你可以这样做:

% suppose data is your matrix (n x 2)
t = data(:,1) / 1000 / 3600 / 24; % time from ms to days
plot(t, data(:,2), '+-');
ticks = linspace(min(t), max(t), 5); % 5 ticks from min to max
labels = datestr(ticks, 'HH:MM'); % get only hours and minutes
set(gca, 'xtick', ticks, 'xtickLabel', labels);