function plot_multi(expData, useMarker, varargin) %PLOT_MULTI This function is used to plot multiple headers on the same plot % expData - structure that stores all of the data % useMarker - flag to indicated whether or not to plot vertical lines % at the marker locations % varargin - the header names and corresponding plotting parameters % % Example of varargin: 'Pitch','r-','Roll','Yaw','go' % This means that Pitch will be plotted in red solids, Roll with no % special formatting and Yaw in green circles. % calculating number of headers numOfHeaders = 0; headers = {}; for i = 1:length(varargin) varargin{i} = strrep(varargin{i},' ', '_'); if(~isPlotCharString(varargin{i})) numOfHeaders = numOfHeaders + 1; headers{numOfHeaders} = varargin{i}; end end % checking to see validity of varargin if (length(varargin) > (numOfHeaders*2)) error('Too many arguments entered'); end % if the plotting style params for each header are different, diffPlotStyles = 1 diffPlotStyles = haveDiffPlotStyles(expData,headers); % extracting time structure time = expData.Time; % extract markerlocations, if any markerLocations = []; if(useMarker) if(~isfield(expData,'Marker')) error('Error! Attempting to plot markers without Marker field'); else markerLocations = find(expData.Marker.data); end end % initiliazing final plot statement to be executed plotString = ['plot(time.data,expData.']; % building the plot statement to be executed for i = 1:length(varargin) entity = varargin{i}; plotString = strcat(plotString,entity); if (i~=length(varargin)) % adding plot style character string if (isPlotCharString(entity)) % entity is a plot character string here plotString = strcat(plotString,''',time.data,expData.'); else % entity is a header here plotString = strcat(plotString,'.data,'); % extracting next entity nextEntity = varargin{i+1}; % checking to see if next entity is a plot character string if (isPlotCharString(nextEntity)) % if yes, add the required inverted commas plotString = strcat(plotString,''''); else % if not, add the plot character string from header's params if(diffPlotStyles) % if the headers have different plotting style params if(isDefaultPlotCharString(eval(['expData.' entity '.params']))) % if the plotting params are default, don't bother plotString = strcat(plotString,'time.data,expData.'); else % else, construct a plot char string and append plotCharString = buildPlotCharString(eval(['expData.' entity '.params'])); plotString = strcat(plotString,''''); plotString = strcat(plotString,plotCharString); plotString = strcat(plotString,''','); plotString = strcat(plotString,'time.data,expData.'); end else % if two or more headers have the same plotting style % params, don't construct their plot char strings plotString = strcat(plotString,'time.data,expData.'); end end end else % this is the last entity in the varargin cell array if(isPlotCharString(entity)) % if a plot character string, add the ending inverted comma plotString = strcat(plotString,''');'); else % if not, add the header's data to the plotString plotString = strcat(plotString,'.data'); % and also add the plot character string from its params if(diffPlotStyles) % if the headers have different plotting style params if (isDefaultPlotCharString(eval(['expData.' entity '.params']))) % if the plotting params are default, don't worry plotString = strcat(plotString,');'); else % else, construct a plot char string and append plotCharString = buildPlotCharString(eval(['expData.' entity '.params'])); plotString = strcat(plotString,','''); plotString = strcat(plotString,plotCharString); plotString = strcat(plotString,''');'); end else % if two or more headers have the same plotting style % params, don't construct their plot char strings plotString = strcat(plotString,');'); end end end end %% plotting stuff figure; % opening a new figure whitebg(gcf,[1 1 1]); % making sure the background is set to white eval(plotString); % plotting grid ON; % plotting grid lines xlim([0,time.data(end)]); % setting x-axis limits xlabel(['Time (' time.unit ')']); % setting x-axis label %constructing yAxisLabel yAxisLabel = []; for i = 1:numOfHeaders if i == numOfHeaders yAxisLabel = strcat(yAxisLabel,headers{i}); if(eval(['isempty(expData.' headers{1} '.unit)'])) break; else yAxisLabel = strcat(yAxisLabel,'(', eval(['expData.' headers{1} '.unit']),')'); end else yAxisLabel = strcat(yAxisLabel,headers{i},','); end end ylabel(yAxisLabel,'Interpreter', 'none'); % constructing statement for inserting the legend legendString = ['legend(']; for i = 1:numOfHeaders if(i == numOfHeaders) legendString = strcat(legendString,headers{i},'''}',',''Interpreter'',''none'',''Location'',''NorthWest'');'); elseif(i == 1) legendString = strcat(legendString,'{''',headers{i},''','''); else legendString = strcat(legendString,headers{i},''','''); end end eval(legendString); % plotting markers, if any for i = 1:numel(markerLocations) %hx = graph2d.constantline(time.data(markerLocations(i)),'Linestyle','--', 'Color', [0.7 0.7 0.7]); %changedependvar(hx,'x'); text(time.data(markerLocations(i)),(min(ylim)+max(ylim))/2,num2str(i)); end end