使用datenum导致不显示两个字符串

时间:2013-03-31 19:17:40

标签: matlab

1。如何正确读取此数据以使日期正确解析? 我试图连接我从文件中读取的字符串,但我得到的输出混淆了。 输出是x轴。另外,x轴的间距有数字而不是我想要的字符串。 该文件有4列,日期,时间,温度和值。 日期是“01.01.2013”​​,时间是“09:08:02”

另外,如果我只想使用第一列(带日期),我该怎么办? 因为使用datenum(mydata {1})会导致“无法解析日期01.01.2013”​​

...
mydata = textscan(fid, '%s %s %f %f', 'delimiter',';', 'HeaderLines',1);
date={};
temp={};
..
date{1}=datenum( strcat(mydata{1},{' '},mydata{2}) );
...

2。如何更正轴刻度?

然后我尝试使用plotyy绘制数据并希望x轴是日期,但我得到两个不同的轴标签。

以下是我正在使用的代码:

temp = mydata{4};
plotyy(date,temp,date,2*temp);
datetick('x','mmm.dd,yyyy');

以下是生成的图像:

enter image description here

--------------- UPDATE ------------------------------- --------

以下是代码:

fid = fopen('test2.txt','r');
mydata = textscan(fid, '%s %s %f %f', 'delimiter',';', 'HeaderLines',1);
fclose(fid);

date=datenum( strcat(mydata{1},{' '},mydata{2}),'mmm.dd,yyyy HH:MM:SS' );
temperature=mydata{3};
value=mydata{4};


[AX,H1,H2]=plotyy(date,temperature,date,value,'plot'); 
set(get(AX(1),'Ylabel'),'String','Temperatures');
set(get(AX(2),'Ylabel'),'String','Value');



set(H1,'LineStyle','--');
set(H2,'LineStyle',':');
datetick(AX(1),'x','mmm.dd,yyyy');


title('Temperatures - Values');
xlabel('Date')

和文件

Date;Time;Temp;value
Jan.01,2013; 11:00:00;20;10                         
Feb.08,2013; 12:00:00;23;11
Mar.04,2013; 04:02:00;24;15
Apr.10,2013; 08:04:00;28;20
May.10,2013; 12:05:00;32;30
Jun.04,2013; 10:06:0;33;27

1 个答案:

答案 0 :(得分:1)

<强> 1。解析输入

您收到“无法解析”错误,因为您还没有包含格式字符串(formatIn)。请参阅datenum的文档。

如果您只想将第一列转换为日期,则显示如下:

date=datenum(mydata{1},'mm.dd.yyyy');

如果要转换第一列和第二列,请尝试:

 date=datenum( strcat(mydata{1},{' '},mydata{2}),'mm.dd.yyyy HH:MM:SS');

这是我正在运行的整个代码,这似乎有效。请注意,我的数据文件中没有标题行。

% data.txt
% 01.01,2013; 11:00:47;10;20
% 01.02,2013; 11:00:57;10;40

fid = fopen('data.txt');
mydata = textscan(fid, '%s %s %f %f', 'delimiter',';');
date=datenum( strcat(mydata{1},{' '},mydata{2}),'mm.dd,yyyy HH:MM:SS');

<强> 2。获得正确的情节

plotyy命令有两个不同的x-ticks。通过以您的方式设置datetick,您只需更改其中一个。相反,将第一个x-tick更改为日期刻度并将第二个x-ticks设置为空。

temp = mydata{4};
[AX,H1,H2] = plotyy(date,temp,date,2*temp);
datetick(AX(1),'x','mmm.dd,yyyy');
set(AX(2),'XTick',[])