blob: 88f17d4377f61263aa95e5c5fdb62318e3dba53d [file]
function plot_shaded(varargin)
% PLOT_SHADED(X,Y) - Plots the line with pretty shaded region under the line in the open
% figure window.
% Inputs:
% X: vector of domain values.
% Y: vector or range values.
%
% PLOT_SHADED(X,Y,...)
% Parameter options include:
% 'Alpha': the alpha value of the shaded region, default 0.15.
% 'Color': the shaded region color.
% 'LineWidth': the contour line width, default = 2.0.
[X,Y,color_value,alpha_value,line_width] = parseinputs(varargin{:});
y_min = min(Y);
y_max = max(Y);
V_alpha = alpha_value*((Y-y_min)/y_max);
F = [1 2 3 4];
hold on
% Create patches for the shaded region
for i=1:numel(X)-1
V = [ X(i) y_min ; X(i) Y(i); X(i+1) Y(i+1); X(i+1) y_min ];
A = [0,V_alpha(i),V_alpha(i+1),0]';
patch('Faces',F,'Vertices',V,'FaceColor',color_value,...
'EdgeColor','none',...
'FaceVertexAlphaData',A,'FaceAlpha','interp','AlphaDataMapping','none');
end
plot(X,Y,'LineWidth',line_width,'Color',color_value);
hold off
end
function [X,Y,color_value,alpha_value,line_width] = parseinputs(varargin)
% Check the number of input args
minargs = 2;
numopts = 3;
maxargs = minargs + 2*numopts;
narginchk(minargs,maxargs);
ax = gca;
% Set the defaults
alpha_value = 0.15;
color_value = ax.ColorOrder(ax.ColorOrderIndex,:);
line_width = 2.0;
% Get the inputs and check them
X = varargin{1};
validateattributes(X,{'numeric'},{'vector','nonnan','finite'},mfilename,'X',2);
Y = varargin{2};
validateattributes(Y,{'numeric'},{'vector','nonnan','finite','numel',numel(X)},mfilename,'Y',2);
% Ensure that X and Y are column vectors
X = X(:);
Y = Y(:);
if nargin > minargs
for i=(minargs+1):2:nargin
PNAME = varargin{i};
PVALUE = varargin{i+1};
PNAME = validatestring(PNAME,{'Alpha','Color','LineWidth','Prctile'},...
mfilename,'ParameterName',i);
switch PNAME
case 'Alpha'
validateattributes(PVALUE,{'numeric'},{'scalar','nonnan','finite','nonnegative','<=',1.0},mfilename,PNAME,i+1);
alpha_value = PVALUE;
case 'Color'
validateattributes(PVALUE,{'numeric'},{'real','nonnegative','nonempty','vector','numel',3,'<=',1.0},mfilename,PNAME,i+1);
color_value = PVALUE;
case 'LineWidth'
validateattributes(PVALUE,{'numeric'},{'scalar','finite','nonnegative'},...
mfilename,PNAME,i+1);
line_width = PVALUE;
end
end
end
end