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