function [ha hb hc] = shadedplot(x, y1, y2, varargin)
% SHADEDPLOT draws two lines on a plot and shades the area between those
% lines.
%
% SHADEDPLOT(x, y1, y2)
% All of the arguments are vectors of the same length, and each y-vector is
% horizontal (i.e. size(y1) = [1 N]). Vector x contains the x-axis values,
% and y1:y2 contain the y-axis values.
%
% Plot y1 and y2 vs x, then shade the area between those two
% lines. Highlight the edges of that band with lines.
%
% SHADEDPLOT(x, y1, y2, areacolor, linecolor)
% The arguments areacolor and linecolor allow the user to set the color
% of the shaded area and the boundary lines. These arguments must be
% either text values (see the help for the PLOT function) or a
% 3-element vector with the color values in RGB (see the help for
% COLORMAP).
%
% [HA HB HC = SHADEDPLOT(x, y1, y2) returns three handles to the calling
% function. HA is a vector of handles to areaseries objects (HA(2) is the
% shaded area), HB is the handle to the first line (x vs y1), and HC is
% the handle to the second line (x vs y2).
%
% Example:
%
% x1 = [1 2 3 4 5 6];
% y1 = x1;
% y2 = x1+1;
% x3 = [1.5 2 2.5 3 3.5 4];
% y3 = 2*x3;
% y4 = 4*ones(size(x3));
% ha = shadedplot(x1, y1, y2, [1 0.7 0.7], 'r'); %first area is red
% hold on
% hb = shadedplot(x3, y3, y4, [0.7 0.7 1]); %second area is blue
% hold off
% plot the shaded area
y = [y1; (y2-y1)]';
ha = area(x, y);
set(ha(1), 'FaceColor', 'none') % this makes the bottom area invisible
set(ha, 'LineStyle', 'none')
% plot the line edges
hold on
hb = plot(x, y1, 'LineWidth', 1);
hc = plot(x, y2, 'LineWidth', 1);
hold off
% set the line and area colors if they are specified
switch length(varargin)
case 0
case 1
set(ha(2), 'FaceColor', varargin{1})
case 2
set(ha(2), 'FaceColor', varargin{1})
set(hb, 'Color', varargin{2})
set(hc, 'Color', varargin{2})
otherwise
end
% put the grid on top of the colored area
set(gca, 'Layer', 'top')
grid on