我有这样的数据:
22.10.1980. 100
25.10.1980. 120
26.10.1980. 12
((仅包含更多内容,并且每个日期的右边都有几个独立的度量)。
现在,这可能是微不足道的,但是我从未在MATLAB中做过类似的事情,并且在在线查找相似的示例时遇到了问题。我需要将数据绘制在时间/显示日期轴(x轴)上,所有日期都在里面(所以23和24。...我没有测量值)。
如何获取日期以显示在绘图轴上?
似乎最好使用datetick
。
用法:datetick('x')
或datetick('x', dateformat)
具有documentation中所述的可用格式。
假设您的数据文件具有上面给出的格式,则可以使用textscan
读取数据:
textscan
fid = fopen('data.txt','rt');
C = textscan(fid,'%s %s %s %d','Delimiter','.','CollectOutput',1);
fclose(fid);
的第一个单元格将包含字符串的N×3单元格数组(日期的一部分),C
的第二个单元格将包含数据测量值的N×1向量。您可以通过先将3个较小的字符串连接成一个日期字符串,然后使用C
函数,为每次测量创建日期编号:
datenum
一旦有了日期数字矢量datenum
和测量矢量t = datenum(strcat(C{1}(:,3),'-',C{1}(:,2),'-',C{1}(:,1)));
data = C{2};
,就可以绘制它们:
t
现在,您可以更改x轴标签以显示实际日期。一种选择是使用函数data
,这是plot(t,data,'*'); %# Plot the points as asterisks
中提供的一种简单而优雅的解决方案。另一种选择是使用函数datetick
自己创建标签,然后修改当前轴的datetick
和steven's answer属性:
datestr
NOTE:无论您选择将x轴标签更改为日期字符串的哪个选项,如果刻度线太靠近,标签可能会相互重叠,这会给您带来麻烦。您可以通过沿x轴减少或重新放置刻度线(通过更改datestr
属性)或调整轴XTick
属性来解决此问题。如果要旋转标签以使其适合,则必须擦除标签并为其创建新的旋转XTick
。以下关于XTickLabel
的提交就是这样做的:
XTickLabel
by xpts = min(t):max(t); %# Make a full vector, filling in missing dates
set(gca,'XTick',xpts,'XTickLabel',datestr(xpts)); %# Set axes properties
] >>使用datenum,您可以根据日期格式符号将任何字符串日期转换为数字格式(请参阅help datestr)。
Datetick以及datetick2是一个不错的选择,可以在这里找到:XTick
您可以使用FontSize
将日期转换为数字,并照常绘制数据。假设您将日期向量放在名为x的变量中。现在,您可以使用