# HG changeset patch # User Rik # Date 1380604348 25200 # Node ID 968c99137122e98f68080e6c52ab8a4a7bc77dc6 # Parent 40ac55bf03dc0fe86277817ab6f1933a9a900cd2 pareto.m: Include 95% of CDF for Matlab compatibility. * scripts/plot/pareto.m: Include element that brings CDF over 95%. Rename x,y in code to match docstring. Simplify code. diff --git a/scripts/plot/pareto.m b/scripts/plot/pareto.m --- a/scripts/plot/pareto.m +++ b/scripts/plot/pareto.m @@ -70,35 +70,34 @@ print_usage (); endif - x = varargin{1}(:).'; + y = varargin{1}(:).'; if (nargin == 2) - y = varargin{2}(:).'; - if (! iscell (y)) - if (ischar (y)) - y = cellstr (y); + x = varargin{2}(:).'; + if (! iscell (x)) + if (ischar (x)) + x = cellstr (x); else - y = cellstr (num2str (y(:))); + x = cellstr (num2str (x(:))); endif endif else - y = cellstr (int2str ([1:numel(x)]')); + x = cellstr (int2str ([1:numel(y)]')); endif - [x, idx] = sort (x, "descend"); - y = y(idx); - cdf = cumsum (x); - maxcdf = max (cdf); - cdf = cdf ./ maxcdf; - cdf95 = cdf - 0.95; - idx95 = find (sign (cdf95(1:end-1)) != sign (cdf95(2:end)))(1); + [y, idx] = sort (y, "descend"); + x = x(idx); + cdf = cumsum (y); + maxcdf = cdf(end); + cdf ./= maxcdf; + idx95 = find (cdf < 0.95, 1, "last") + 1; if (isempty (hax)) - [ax, hbar, hline] = plotyy (1 : idx95, x (1 : idx95), - 1 : length (cdf), 100 .* cdf, + [ax, hbar, hline] = plotyy (1 : idx95, y(1:idx95), + 1 : length (cdf), 100 * cdf, @bar, @plot); else - [ax, hbar, hline] = plotyy (hax, 1 : idx95, x (1 : idx95), - 1 : length (cdf), 100 .* cdf, + [ax, hbar, hline] = plotyy (hax, 1 : idx95, y(1:idx95), + 1 : length (cdf), 100 * cdf, @bar, @plot); endif @@ -106,8 +105,7 @@ axis (ax(2), [1 - 0.6, idx95 + 0.6, 0, 100]); set (ax(2), "ytick", [0, 20, 40, 60, 80, 100], "yticklabel", {"0%", "20%", "40%", "60%", "80%", "100%"}); - set (ax(1), "xtick", 1:idx95, "xticklabel", y(1:idx95)); - set (ax(2), "xtick", 1:idx95, "xticklabel", y(1:idx95)); + set (ax(1:2), "xtick", 1:idx95, "xticklabel", x(1:idx95)); if (nargout > 0) h = [hbar; hline];