我正在尝试在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)
有效。在我的示例数据中,我有 同一天的单个值 。 如何用 每天只出现一次 的日期标记我的情节。
问候,
答案 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);
这就是你能得到的:
答案 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”)。不确定它们是什么(可能是千位分隔符?)但你需要处理它们。上面的代码不适用于那些。