wolffd@0: function ax = axis_pct(pct) wolffd@0: % AXIS_PCT Set reasonable axis limits. wolffd@0: % AXIS_PCT(pct) sets axis limits to extend pct% beyond limits of plotted wolffd@0: % objects. Default is 5%. wolffd@0: % Works for linear or log scale. wolffd@0: % Unfortunately, the axes won't change when new points are plotted. wolffd@0: wolffd@0: if nargin < 1 wolffd@0: pct = 0.05; wolffd@0: end wolffd@0: ax = [Inf -Inf Inf -Inf Inf -Inf]; wolffd@0: wolffd@0: % find bounding box of plotted objects wolffd@0: children = get(gca,'children'); wolffd@0: for child = children' wolffd@0: if strcmp(get(child,'type'),'text') wolffd@0: xyz = get(child,'position'); wolffd@0: % need to determine bounding box of the text wolffd@0: c([1 2]) = xyz(1); wolffd@0: c([3 4]) = xyz(2); wolffd@0: c([5 6]) = xyz(3); wolffd@0: else wolffd@0: x = get(child,'xdata'); wolffd@0: c(1) = min(x); wolffd@0: c(2) = max(x); wolffd@0: y = get(child,'ydata'); wolffd@0: c(3) = min(y); wolffd@0: c(4) = max(y); wolffd@0: z = get(child,'zdata'); wolffd@0: if isempty(z) wolffd@0: c([5 6]) = 0; wolffd@0: else wolffd@0: c(5) = min(z); wolffd@0: c(6) = max(z); wolffd@0: end wolffd@0: end wolffd@0: ax([1 3 5]) = min(ax([1 3 5]), c([1 3 5])); wolffd@0: ax([2 4 6]) = max(ax([2 4 6]), c([2 4 6])); wolffd@0: end wolffd@0: if strcmp(get(gca,'xscale'), 'log') wolffd@0: ax([1 2]) = log(ax([1 2])); wolffd@0: end wolffd@0: if strcmp(get(gca,'yscale'), 'log') wolffd@0: ax([3 4]) = log(ax([3 4])); wolffd@0: end wolffd@0: dx = ax(2)-ax(1); wolffd@0: if dx == 0 wolffd@0: dx = 1; wolffd@0: end wolffd@0: dy = ax(4)-ax(3); wolffd@0: if dy == 0 wolffd@0: dy = 1; wolffd@0: end wolffd@0: dz = ax(6)-ax(5); wolffd@0: if dz == 0 wolffd@0: dz = 1; wolffd@0: end wolffd@0: ax = ax + [-dx dx -dy dy -dz dz]*pct; wolffd@0: if strcmp(get(gca,'xscale'), 'log') wolffd@0: ax([1 2]) = exp(ax([1 2])); wolffd@0: end wolffd@0: if strcmp(get(gca,'yscale'), 'log') wolffd@0: ax([3 4]) = exp(ax([3 4])); wolffd@0: end wolffd@0: % clip for 2D wolffd@0: ax = ax(1:length(axis)); wolffd@0: axis(ax); wolffd@0: if nargout < 1 wolffd@0: clear ax wolffd@0: end