在时间(日期)轴上绘制数据

问题描述 投票:6回答:5

我有这样的数据:

22.10.1980. 100  
25.10.1980. 120  
26.10.1980.  12

((仅包含更多内容,并且每个日期的右边都有几个独立的度量)。

现在,这可能是微不足道的,但是我从未在MATLAB中做过类似的事情,并且在在线查找相似的示例时遇到了问题。我需要将数据绘制在时间/显示日期轴(x轴)上,所有日期都在里面(所以23和24。...我没有测量值)。

如何获取日期以显示在绘图轴上?

matlab date matlab-figure
5个回答
16
投票

似乎最好使用datetick

用法:datetick('x')datetick('x', dateformat)具有documentation中所述的可用格式。


4
投票

假设您的数据文件具有上面给出的格式,则可以使用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自己创建标签,然后修改当前轴的dateticksteven'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 ] >>

3
投票

使用datenum,您可以根据日期格式符号将任何字符串日期转换为数字格式(请参阅help datestr)。


2
投票

Datetick以及datetick2是一个不错的选择,可以在这里找到:XTick


1
投票

您可以使用FontSize将日期转换为数字,并照常绘制数据。假设您将日期向量放在名为x的变量中。现在,您可以使用

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.