1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
function fig = EdulogPlot(data, loggers)
% Create a plot from Edulog data
%
% "data" is a structure generated by running an Edulogger experiment,
% consisting of the following fields: Time: The time (s) since the start of
% the experiment of each sample. (double) Concern: Whether or not each
% sample took more than twice the specified sample rate to retrieve
% (logical) Event (optional): Whether or not an event happened at this
% point (logical) An additional field for each kind of Edulogger used,
% containing the measurements taken at each point in data.Time. Fieldnames
% should line up with the names specified in "loggers". "loggers" is a one
% dimensional cell array, with each string specifying the name of a
% different Edulogger as described in the Neulog API literature:
% https://neulog.com/wp-content/uploads/2014/06/NeuLog-API-version-7.pdf
%
% "fig" is a Graphics Object containing the graph generated, properties of
% the graph can be changed by editing this object.
% History:
% ??-??-???? Todd Parsons Written.
sDim = get(0,'screensize'); % Get screensize
close all; % Close any open figures
% Create & setup a blank figure
fig = figure; % Create figure
set(fig, 'Name', 'Edulog Data'); % Name figure
set(fig, 'NumberTitle', 'off'); % Remove "Figure 1" label
set(fig, 'Color', 'white'); % White background
pos = [200, 100, sDim(3) - 400, sDim(4) - 200];
set(fig, 'Position', pos); % Resize to the height of the screen - 200
% Extract data
m = min(length(loggers), 3); % Determine number of rows (max 3)
n = ceil(length(loggers)/3); % Determine number of columns
e = [data.Event]; % Find events
c = [data.Concern]; % Find latency points
x = [data.Time]; % Extract x data
for L = 1:length(loggers)
% Get data
y = [data.(loggers{L})];
% Setup axis
ax{L} = subplot(m, n, L); % Choose sub-plot to draw in
rect = get(ax{L}, 'Position');
rect([1,3]) = [0.1, 0.8];
set(ax{L}, 'Position', rect); % Position plot
set(ax{L}, 'FontName', 'Verdana'); % Change font
set(get(ax{L}, 'XLabel'), 'String', 'Time (s)'); % Label x-axis
set(get(ax{L}, 'YLabel'), 'String', loggers{L}); % Label y-axis
set(ax{L}, 'Color', [0.98, 0.98, 1]); % Axis background
set(ax{L}, 'XGrid', 'on'); % Add vertical gridlines
set(ax{L}, 'YGrid', 'on'); % Add horizontal gridlines
set(ax{L}, 'GridColor', 'white'); % Make gridlines white
set(ax{L}, 'GridAlpha', 1); % Make gridlines opaque
% Plot data
ln{L} = line(x, y, 'Color', [42, 107, 211]./255, 'LineWidth', 2); %#ok<*NASGU,*AGROW> % Plot data
ev{L} = line([[data(e).Time]; [data(e).Time]]', get(ax{L}, 'YLim'), 'Color', 'k', 'LineWidth', 2); % Plot events
co{L} = line([[data(c).Time]; [data(c).Time]]', get(ax{L}, 'YLim'), 'Color', 'r', 'LineStyle', ':'); % Plot concern points
% Draw legend
le{L} = legend({"Data", "Events", "Concern"}); %#ok<CLARRSTR> % Add legend
rect = get(le{L}, 'Position');
rect([1,3]) = [0.9, 0.1];
set(le{L}, 'Position', rect); % Position legend
set(le{L}, 'Box', 'off'); % Remove outline
end
|