Запрос MATLAB о цикле, чтении данных и построении графиков - PullRequest
1 голос
/ 24 декабря 2010

Я новичок в использовании matlab и пытаюсь понять, есть ли способ оптимизировать мой код.По сути, у меня есть данные из выходных данных модели, и мне нужно построить их с помощью Matlab.Кроме того, у меня есть справочные данные (с доверительными интервалами 95%), которые я нанесу на тот же график, чтобы получить наглядное представление о том, насколько близки выходные данные модели и справочные данные.

С точки зрения выходных данных модели у меня есть несколько тысяч файлов (последовательно), которые я открываю в цикле и строю график.Проблема / вопрос, который я имею, состоит в том, могу ли я предварительно обработать данные и затем построить график позже, чтобы сэкономить время.Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что у меня есть легенда, которая либо не отображается, либо является неточной.

Мой код (извините, если он не элегантный):

   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  

По сути, я надеялся получить способ чтения данных, а затем построить график позже - т.е.оптимизировать код.

Надеюсь, вы сможете помочь.

Спасибо.

mp

1 Ответ

2 голосов
/ 25 декабря 2010

Относительно вашей проблемы, касающейся

У меня есть легенда, которая либо не появляется, либо является неточной.

взгляните на следующие выдержки из вашего кода.

...
h = zeros (1,1000);  
...   
a=int2str(i);  
...
h(a)=plot(t1,totalmodel);  
...

Вы используете массив символов в качестве индекса.Вместо h(a) вы должны использовать h(i).Кажется, MATLAB преобразует массив символов a в double, как показано в следующем примере, с a = 10;.

>> double(int2str(10))
ans = 49    48

Вместо h(10) дескриптор графика будетназначен на h([49 48]), что не является вашим намерением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...