用日期标记一个数字(每天只有一次),matlab

时间:2012-12-11 17:26:38

标签: matlab

我正在尝试在matlab中绘制值。

我的csv文件看起来像这样,

> 15.12.2012 11:27; 0.9884753
> 15.12.2012 11:12; 10.670.642
> 15.12.2012 10:57; 114.455.145
> 15.12.2012 10:42; 101.301.446
> 14.12.2012 10:27; 0.99031037
> 14.12.2012 10:12; 104.594.388
> 14.12.2012 09:57; 0.97192177
> 14.12.2012 09:42; 0.8925
> 14.12.2012 09:27; 0.8985693
> 14.12.2012 09:12; 0.955
> 14.12.2012 08:57; 0.95103529
> 13.12.2012 08:42; 0.95203444
> 13.12.2012 08:27; 0.955
> 13.12.2012 08:12; 0.95970876
> 13.12.2012 07:57; 0.95929422
> 13.12.2012 07:42; 0.95578656
> 13.12.2012 07:27; 0.955
> 12.12.2012 07:12; 0.955
> 12.12.2012 06:57; 0.95342687
> 12.12.2012 06:42; 0.955
> 12.12.2012 06:27; 0.955
> 12.12.2012 06:12; 0.95930485
> 11.12.2012 05:57; 0.95530825
> 11.12.2012 05:42; 0.96452381
> 10.12.2012 05:27; 0.9675
> 10.12.2012 05:12; 0.98778061
> 10.12.2012 04:57; 102.982.993

我正在读'11 .12.2012 04:57'; as string然后使用datvec。

  

[Y,M,D,H,MN,S] = datevec('String')

再说清楚

Col1=String  % [Y, M, D, H, MN, S]
Col2= number % [0.9884753;...;102.982.993]

现在我想针对第一个Col1([Y,M,d])绘制第二个col2。

plot (Col2)

有效。在我的示例数据中,我有 同一天的单个值 。 如何用 每天只出现一次 的日期标记我的情节。

问候,

4 个答案:

答案 0 :(得分:1)

设置一组自定义刻度,如下所示:

startTicks=find([false diff(D)~=0]); % This is a bit of a hack, but will show you anytime the day has changed. Might be confused if you jump a month at a time.
plot(Col2)
set(gca,'XTick',startTicks)
set(gca,'XTickLabel',Col1(startTicks));

答案 1 :(得分:1)

您可以执行以下列出的操作。由于日期字符串不是很短,因此渲染它们看起来更好(rotateticklabel)。

str = {
  '15.12.2012 11:27';
  '15.12.2012 11:12';
  ...
  '10.12.2012 04:57'
};

num = [
  0.9884753;
  10.670642;
  ...
  102.982993
];

% find first occurrence of dates
[y,m,d,h,mn] = datevec(str,'dd.mm.yyyy HH:MM');
dn = datenum(y,m,d);
[~,ind] = unique(dn,'first');
ind = sort(ind);

% plot it nicely
plot(num);
ax = gca;
dstr = cellstr(datestr(dn,'dd.mm.yyyy'));
set(ax, 'XTick',ind, 'XTickLabel',dstr(ind), 'Position',[0.1,0.15,0.8,0.75]);
rotateticklabel(ax, 30);

这就是你能得到的: enter image description here

答案 2 :(得分:0)

http://www.mathworks.de/de/help/matlab/ref/timeseries.plot.html

您正在寻找时间序列图,请查看第一个示例。

答案 3 :(得分:0)

您希望使用datenum代替datevec来获取一组日期值,绘制它们然后使用datetick。例如。取上面的最后三点:

date_str = {'10.12.2012 05:27' '10.12.2012 05:12' '10.12.2012 04:57'};
y = [0.9675 0.98778061 102.982];

x = datenum(date_str, 'dd.mm.yyyy HH:MM');

plot(x,y);
datetick x

注意:你在第二列中有两个点的数字(例如“10.670.642”和“114.455.145”)。不确定它们是什么(可能是千位分隔符?)但你需要处理它们。上面的代码不适用于那些。