Matlab更改x轴刻度标签

时间:2014-03-29 12:13:47

标签: matlab plot matlab-figure

我对matlab相对缺乏经验,因为我偶尔只使用它。我试图根据时间绘制大范围的值,我遇到了一些问题。

来自文本文件的数据,包含大约55000个条目,以下列格式提供信息:

年月日小时分秒值

秒列的精确度为6位小数,大约有24小时的数据。

我想要做的是根据时间绘制值,这很好。但是,由于下面的代码,x轴在序列日期编号格式中有标签刻度,这在查看图时不是很有用。我想将标签更改为更有用的时间间隔。但是我不知道该怎么做。

以下是代码:

A = dlmread('data.txt',' ');
time = datenum(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6));
scatter(time,A(:,7),1)
axis([min(time) max(time) min(A(:,7)) max(A(:,7))])

我在这里找到了一个解决方案:matlab ticks with certain labels但是,此处的过程是手动的,如果有太多信息,我不想手动执行此操作。我该如何自动化这个过程?或者有更好的方法来实现我想要实现的目标吗?

编辑:我也发现了这种方法:http://www.mathworks.com/help/matlab/ref/datetick.html#btpnuk4-1但是,我不想显示实际日期,我宁愿显示时间间隔,即一小时或30分钟。

编辑2:我找到了一个令人满意的解决方案。它仍然可以改进,所以我不知道我是否应该提交这个作为我自己的问题的答案,但这里是:

A = dlmread('data.txt',' ');
time = datenum(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6));
temp= time(1);
timediff = time - temp;
scatter(timediff,A(:,7),1)
axis([min(timediff) max(timediff) min(A(:,7)) max(A(:,7))])
datetick('x', 'HH')

这将采用序列化时间格式的原始时间向量,并从所有后续时间中减去第一次以获得差异。它使用datetick函数将其转换为小时。这不是理想的,因为它不是24小时就会回到00,但它是迄今为止我尝试过的最好的。

2 个答案:

答案 0 :(得分:0)

参考另一篇文章,您将必须遵循相同的方法,但为了自动化该过程,您需要在读取数据时以及在绘制完数据后形成xtick和xticklabels的向量。数据更改xticks和xticklabels。

您尝试做的并不困难,但我需要更多详细信息,说明如何组织刻度以准确说出您必须遵循的步骤

答案 1 :(得分:0)

Matlab序列时间就是自0000年1月1日以来的几天,因此您的timediff变量实际上是自实验开始以来经过的天数(及其分数)。如果你希望你的x刻度经过几小时,你可以将timediff乘以24。

scatter(timediff * 24, values)

这避免了使用datetick时可能出现的奇怪现象。