Plotting multiple text files columns in the same graph

조회 수: 7 (최근 30일)
Gabriel Maya
Gabriel Maya 2016년 3월 6일
댓글: Gabriel Maya 2016년 3월 7일
Hi guys, I have about 25 files consisting of 300 rows and 3 columns.
I'd like to plot the first column of each file in the same graph. Is it possible?
Thanks in advance !
  댓글 수: 3
Gabriel Maya
Gabriel Maya 2016년 3월 6일
편집: Walter Roberson 2016년 3월 6일
Hi Ced: here is the code I got so far:
workDir='C:\Users\gabri\Desktop\Nova_pasta\Arquivos_Saida_Imex';
for i=1:25
cd(workDir);
pasta= ['cd ' num2str(i) ];
eval (pasta)
filename= '' workDir ''\'' num2str(i) ''\''arqanepi.rwo''
delimiter = '\t';
startRow = 6;
formatSpec = '%f%f%f%f%[^\n\r]';
%%Open the text file.
fileID = fopen('arqanepi.rwo','r');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'HeaderLines' ,startRow-1, 'ReturnOnError', false);
%%Close the text file.
fclose(fileID);
%%Allocate imported array to column variable names
days(:,i) = dataArray{:, 1};
Oil(:,i) = dataArray{:, 2};
Gas(:,i) = dataArray{:, 3};
Water(:,i)= dataArray{:, 4};
cd (workDir)
end
plot(days(:,1), Oil(:,:))
I am able to save all my data in the Variables day, oil, water and gas.
But when I try to plot all curves of Oil, for example, I only get one.
Can you help me with this?
Best Regards.
Stephen23
Stephen23 2016년 3월 7일
@Gabriel Maya: don't use cd to switch between files: this is slow and buggy. It is much more faster and more reliable to pass full/relative filepaths to your file handling functions, exactly as Walter Roberson shows in their answer. Also you should avoid using eval for such trivial code, which is also slow and buggy way to program.

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2016년 3월 7일
workDir = 'C:\Users\gabri\Desktop\Nova_pasta\Arquivos_Saida_Imex';
delimiter = '\t';
startRow = 6;
%your description says three columns, your code says four, your previous format implied their might be more
formatSpec = '%f%f%f%f';
for i = 1:25
this_subdir = sprintf('%d', i);
filename = fullfile( workDir, this_subdir, 'arqanepi.rwo');
%%Open the text file.
fileID = fopen(filename, 'rt');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'HeaderLines', startRow-1, 'ReturnOnError', false);
%%Close the text file.
fclose(fileID);
%%Allocate imported array to column variable names
days(:,i) = dataArray{:, 1};
Oil(:,i) = dataArray{:, 2};
Gas(:,i) = dataArray{:, 3};
Water(:,i)= dataArray{:, 4};
end
plot(days(:,1), Oil)
  댓글 수: 2
Ced
Ced 2016년 3월 7일
Did that answer your question? Otherwise, attach one of your files.
PS: If you want to have a legend for all files without having to type it up, you could do something like
N_files = 25;
leg_str = cellfun(@(x)sprintf('dataset %i',x),num2cell(1:N_files),'UniformOutput',0);
legend(leg_str)
Gabriel Maya
Gabriel Maya 2016년 3월 7일
That answered !
Thanks for the sugestion also :)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 String Parsing에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by