Something went wrong on our end
-
Andy Snawerdt authored
Updated analysis tools to handle spaces in header files and properly format axis, titles, and legends
Andy Snawerdt authoredUpdated analysis tools to handle spaces in header files and properly format axis, titles, and legends
plot_multi.m 6.34 KiB
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