xerrorbar.m
changeset 0 40938dd7a1f1
new file mode 100644
--- /dev/null
+++ b/xerrorbar.m
@@ -0,0 +1,141 @@
+function hh = xerrorbar(x, y, l,u,symbol)
+%XERRORBAR Error bar plot.
+%
+%   XERRORBAR(X,Y,L,U) behaves similar to ERRORBAR, from which it was 
+%   derived
+%
+%   Global Variables:
+%	TICSLEN		half-length of ticmarks in terms of y units;
+%			+ve values: y units; 
+%			-ve values: fraction of y total y-range;
+%			default: -0.005
+%	ERRORBARS_ONLY	do not plot data points
+
+%======================================================================
+%                    X E R R O R B A R . M 
+%                    doc: Sun Feb 23 08:55:37 2003
+%                    dlm: Tue Mar 11 11:52:52 2003
+%                    (c) 2003 Mathworks; changes by A.M. Thurnherr
+%                    uE-Info: 137 49 NIL 0 0 72 2 2 8 NIL ofnI
+%======================================================================
+
+% HISTORY:
+%	Feb 23, 2003: - created from [errorbar.m]
+%	Mar 10, 2003: - added TICSLEN
+%	Mar 11, 2003: - changed TICSLEN sign convention
+%		      - added ERRORBARS_ONLY
+
+global TICSLEN; if isempty(TICSLEN), TICSLEN = -0.005; end
+global ERRORBARS_ONLY;
+
+if min(size(y))==1,
+  npt = length(y);
+  x = x(:);
+  y = y(:);
+    if nargin > 2,
+        if ~isstr(l),  
+            l = l(:);
+        end
+        if nargin > 3
+            if ~isstr(u)
+                u = u(:);
+            end
+        end
+    end
+else
+  [npt,n] = size(y);
+end
+
+if nargin == 3
+    if ~isstr(l)  
+        u = l;
+        symbol = '-';
+    else
+        symbol = l;
+        l = x;
+        u = x;
+        x = y;
+        [m,n] = size(x);
+        y(:) = (1:npt)'*ones(1,n);;
+    end
+end
+
+if nargin == 4
+    if isstr(u),    
+        symbol = u;
+        u = l;
+    else
+        symbol = '-';
+    end
+end
+
+
+if nargin == 2
+    l = x;
+    u = x;
+    x = y;
+    [m,n] = size(x);
+    y(:) = (1:npt)'*ones(1,n);;
+    symbol = '-';
+end
+
+u = abs(u);
+l = abs(l);
+    
+if isstr(x) | isstr(y) | isstr(u) | isstr(l)
+    error('Arguments must be numeric.')
+end
+
+if ~isequal(size(x),size(y)) | ~isequal(size(x),size(l)) | ~isequal(size(x),size(u)),
+  error('The sizes of X, Y, L and U must be the same.');
+end
+
+if TICSLEN < 0
+	tee = (max(y(:))-min(y(:))).*-TICSLEN;
+else
+	tee = TICSLEN;
+end
+yl = y - tee;
+yr = y + tee;
+xtop = x + u;
+xbot = x - l;
+n = size(x,2);
+
+% Plot graph and bars
+hold_state = ishold;
+cax = newplot;
+next = lower(get(cax,'NextPlot'));
+
+% build up nan-separated vector for bars
+yb = zeros(npt*9,n);
+yb(1:9:end,:) = y;
+yb(2:9:end,:) = y;
+yb(3:9:end,:) = NaN;
+yb(4:9:end,:) = yl;
+yb(5:9:end,:) = yr;
+yb(6:9:end,:) = NaN;
+yb(7:9:end,:) = yl;
+yb(8:9:end,:) = yr;
+yb(9:9:end,:) = NaN;
+
+xb = zeros(npt*9,n);
+xb(1:9:end,:) = xtop;
+xb(2:9:end,:) = xbot;
+xb(3:9:end,:) = NaN;
+xb(4:9:end,:) = xtop;
+xb(5:9:end,:) = xtop;
+xb(6:9:end,:) = NaN;
+xb(7:9:end,:) = xbot;
+xb(8:9:end,:) = xbot;
+xb(9:9:end,:) = NaN;
+
+[ls,col,mark,msg] = colstyle(symbol); if ~isempty(msg), error(msg); end
+symbol = [ls mark col]; % Use marker only on data part
+esymbol = ['-' col]; % Make sure bars are solid
+
+h = plot(xb,yb,esymbol); hold on
+if ~ERRORBARS_ONLY, h = [h;plot(x,y,symbol)]; end
+
+if ~hold_state, hold off; end
+
+if nargout>0, hh = h; end