在我的绘图的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(代表星期一18 2846 14:07:37 GMT + 0100),最后一个时间戳是27658504995000(代表Mon Jun 18 2846 15:03:15 GMT + 0100)。我只对14:07到15:03感兴趣。在我的x轴上,第一个标签应该是14:10,然后应该每5分钟有一个标签,即14:15,14:20等。最后一个标签是在15:00。
如何做到这一点?
答案 0 :(得分:4)
使用datetick
dateFormat = 15; % 15 is HH:MM, see docs
datetick('x',dateFormat)% equivalent: datetick('x','HH:MM')
如果轴上需要特定边界,可以使用xlim
设置所需的精确边界。如果您还需要帮助将毫秒值转换为正确的日期,请除以1e3
,因为我怀疑它们已经是datenum
格式。
答案 1 :(得分:3)
datetick
的The answer by Adriaan应该是简单的解决方案。如果您想自己控制细节水平,可以执行以下操作:
% 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);