我有这样的数据:
22.10.1980. 100
25.10.1980. 120
26.10.1980. 12
(只是更多的数据,对于每个日期,右侧有几个独立的测量值)。
现在,这可能很琐碎,但我从未在MATLAB中做过类似的事情,并且在网上找不到类似的示例。 我需要在时间/日期轴(x轴)上绘制数据,并显示所有日期(因此,23和24也是如此...但我没有测量值)。
我该如何让日期显示在绘图轴上?
我有这样的数据:
22.10.1980. 100
25.10.1980. 120
26.10.1980. 12
(只是更多的数据,对于每个日期,右侧有几个独立的测量值)。
现在,这可能很琐碎,但我从未在MATLAB中做过类似的事情,并且在网上找不到类似的示例。 我需要在时间/日期轴(x轴)上绘制数据,并显示所有日期(因此,23和24也是如此...但我没有测量值)。
我该如何让日期显示在绘图轴上?
看起来最好使用datetick
。
用法:datetick('x')
或 datetick('x', dateformat)
,可使用文档中说明的可用格式。(文档链接)
textscan
来读取数据:fid = fopen('data.txt','rt');
C = textscan(fid,'%s %s %s %d','Delimiter','.','CollectOutput',1);
fclose(fid);
C
的第一个单元格将包含一个N乘3的字符串单元格数组(日期的部分),而C
的第二个单元格将包含一个N乘1的数据测量向量。您可以通过首先将3个较小的字符串连接成一个日期字符串,然后使用datenum
函数为每个测量创建一个日期数字:
t = datenum(strcat(C{1}(:,3),'-',C{1}(:,2),'-',C{1}(:,1)));
data = C{2};
plot(t,data,'*'); %# Plot the points as asterisks
datetick
,这是一个简单而优雅的解决方案,如Steven 的答案所述。另一种选项是使用函数datestr
自己创建标签,然后修改当前轴的 XTick
和 XTickLabel
属性。xpts = min(t):max(t); %# Make a full vector, filling in missing dates
set(gca,'XTick',xpts,'XTickLabel',datestr(xpts)); %# Set axes properties
XTick
属性)或调整轴FontSize
属性来解决此问题。如果您想旋转标签以使其适合,则必须擦除标签并为它们创建新的旋转text objects。以下在The MathWorks File Exchange上提交的内容就是这样做的:
您可以使用datenum将日期转换为数字,并像往常一样绘制数据。假设您将日期向量放在名为x的变量中。 现在,您可以使用
set(gca, 'xtick',x(1:10:end));
set(gca, 'xticklabel',datestr(x(1:10:end));
设置 x 轴上的刻度。