0

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');

这是生成的图像:

在此处输入图像描述

- - - - - - - -更新 - - - - - - - - - - - - - - - - - -----

这是代码:

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
4

1 回答 1

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 更改为 date 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',[])
于 2013-03-31T22:12:38.693 回答