MATLAB query about for loop, reading in data and plotting

Posted by mp7 on Stack Overflow See other posts from Stack Overflow or by mp7
Published on 2010-12-24T19:27:26Z Indexed on 2010/12/25 9:54 UTC
Read the original article Hit count: 229

Filed under:

Hi there,

I am a complete novice at using matlab and am trying to work out if there is a way of optimising my code. Essentially I have data from model outputs and I need to plot them using matlab. In addition I have reference data (with 95% confidence intervals) which I plot on the same graph to get a visual idea on how close the model outputs and reference data is.

In terms of the model outputs I have several thousand files (number sequentially) which I open in a loop and plot. The problem/question I have is whether I can preprocess the data and then plot later - to save time. The issue I seem to be having when I try this is that I have a legend which either does not appear or is inaccurate.

My code (apolgies if it not elegant):

   fn= xlsread(['tbobserved' '.xls']); 
   time= fn(:,1); 
   totalreference=fn(:,4);  
   totalreferencelowerci=fn(:,6);  
   totalreferenceupperci=fn(:,7);  
   figure  
   plot(time,totalrefrence,'-', time, totalreferencelowerci,'--', time, totalreferenceupperci,'--');  
   xlabel('Year');  
   ylabel('Reference incidence per 100,000 population');  
   title ('Total');  
   clickableLegend('Observed reference data', 'Totalreferencelowerci',  'Totalreferenceupperci','Location','BestOutside');  
   xlim([1910 1970]);  
   hold on  
   start_sim=10000;  
   end_sim=10005;  
   h = zeros (1,1000);  
   for i=start_sim:end_sim %is there any way of doing this earlier to save time?  
   a=int2str(i);  
   incidenceFile =strcat('result_', 'Sim', '_', a, 'I_byCal_total.xls');  
   est_tot=importdata(incidenceFile, '\t', 1);  
   cal_tot=est_tot.data;  
   magnitude=1;  
   t1=cal_tot(:,1)+1750;  
   totalmodel=cal_tot(:,3)+cal_tot(:,5);  
   h(a)=plot(t1,totalmodel);  
   xlim([1910 1970]);  
   ylim([0 500]);  
   hold all  
   clickableLegend(h(a),a,'Location','BestOutside')    
   end  

Essentially I was hoping to have a way of reading in the data and then plot later - ie. optimise the code.

I hope you might be able to help.

Thanks.

mp

© Stack Overflow or respective owner

Related posts about matlab