使用来自txt文件的数据在MATLAB中绘图

时间:2017-02-25 12:47:46

标签: matlab file plot

我需要从文件中读取数据并使用其数据绘制图表。问题是:

  • (1)我无法更改文件中的数据格式
  • (2)格式包含我不知道如何处理的信息和字符。

以下是数据文件的一部分,它采用txt格式:

Estation;Date;Time;Temp1;Temp2;Pressure;
83743;01/01/2016;0000;31.9;25.3;1005.1;
83743;01/01/2016;1200;31.3;26.7;1005.7;
83743;01/01/2016;1800;33.1;25.4;1004.3;
83743;02/01/2016;0000;26.1;24.2;1008.6;

我要做的是将DateTimeTemp1Temp2联系起来,而不是担心压力。第一列也可以忽略不计。如何将DateTimeTemps提取到矩阵中以便我可以绘制它们?到目前为止,我所做的只是:

fileID = fopen('teste.txt','r');
[A] = fscanf(fileID, ['%d' ';']);
fclose(fileID);
disp(A);

只读取第一个值83743

2 个答案:

答案 0 :(得分:2)

构建于m7913d's answer

fileID = fopen('MyFile.txt','r');
A = fscanf(fileID, ['%s' ';']); % read the header line
B = fscanf(fileID, '%d;%d/%d/%d;%d;%f;%f;%f;', [8,inf]); % read all the data into B (the date is parsed into three columns)
fclose(fileID);
B = B.'; % transpose B
% C is just for verification, can be omitted
C = datetime([B(:,4:-1:2) B(:,5)/100zeros(numel(B(:,1)),2)],'InputFormat','yyyy-MM-dd HH:mm:ss'); 
D = datenum(C);   % Get the date in a MATLAB usable format

Titles = strsplit(A,';'); % Get column names

figure;
hold on % hold the figure for multiple plots
plot(D,B(:,6),'r')
plot(D,B(:,7),'b')
datetick('x') % Set a date tick as axis
legend(Titles{4},Titles{5}); % uses titles for legend

请注意将日期解析为C:首先是您以dd-MM-yyyy格式提供的日期,我将其转换为yyyy-MM-dd的官方标准,然后是您的小时,需要除以100,然后分钟和秒为0。当您没有完整的每小时数据时,您可能需要将这些分开。最后转换为常规datenum,MATLAB可以使用它进行处理。

结果是:

enter image description here

您可能想要使用datetick格式,因为它有很多可能对您有吸引力的选项。

答案 1 :(得分:1)

fileID = fopen('input.txt','r');
[A] = fscanf(fileID, ['%s' ';']); % read the header line
[B] = fscanf(fileID, '%d;%d/%d/%d;%d;%f;%f;%f;', [8,inf]); % read all the data into B (the date is parsed into three columns)
fclose(fileID);
disp(B');

请注意%d读取整数(不是双精度数),%f读取浮点数。

有关详细信息,请参阅fscanf