/
plotMutlipleHists.m
65 lines (54 loc) · 1.43 KB
/
plotMutlipleHists.m
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
function plotMutlipleHists(varargin)
%{
Plot multiple vectors on the same figure but make sure the bins and limits
align
INPUTS:
varargin:
vectors of data
OUTPUT:
Figure with multiple histograms that have align edges
%}
% check arguments are vectors
arguments (Repeating)
varargin (1,:) {mustBeVector}
end
numVectors = length(varargin);
h = gobjects([numVectors, 1]); % pre-allocate
f = gobjects([numVectors, 1]);
binDistances = nan([numVectors, 1]);
for n = 1:numVectors
% plot individually to get individual bin edges
f(n) = figure('visible', 'off');
h(n) = histogram(varargin{n});
binDistances(n) = calculateDistanceBtwEdges(h(n));
end
overallLimits = determineLargestLimits(h);
delta = determineSmallestDelta(binDistances);
close(f)
plotAll(varargin, overallLimits, delta)
end
function plotAll(data, limits, delta)
figure();
edges = limits(1):delta:limits(2);
for i =1:length(data)
histogram(data{i}, 'binlimits', limits, 'binedges', edges);
if i == 1
hold on
end
end
ylabel('Frequency')
set(gca, 'fontsize', 16)
end
function smallestDelta = determineSmallestDelta(distances)
smallestDelta = min(distances);
end
function limitsRange = determineLargestLimits(h)
limits = nan([length(h), 2]);
for i = 1:length(h)
limits(i,:) = h(i).BinLimits;
end
limitsRange = [min(limits(:,1)), max(limits(:,2))];
end
function distances = calculateDistanceBtwEdges(h)
distances = h.BinWidth;
end