# 2.8 Modified errorbar which Cycles Through Line Styles

## Problem

If X and Y are MxN arrays, errorbar generates a plot using the same line style. On a monochrome monitor, it's hard to distinguish between the lines. Is it possible to force errorbar to cycle through the line styles?

## Solution

The reason that errorbar generates the plots using solid lines is because errorbar defaults to a solid line when fewer than five inputs are used. Below is a modified version of errorbar which cycles through the lines defined in the axes LineStyleOrder property on monochrome monitors.

------------------------------------------------------------

```function errorbar(x, y, l,u,symbol)
%ERRORBAR Plot graph with error bars.
%  ERRORBAR(X,Y,L,U,SYMBOL) plots the graph of vector X
%  vs. vector Y with error bars specified by the vectors
%  L and U.  The vectors X,Y,L and U must be the same
%  length.  If X,Y, L and U are matrices then each column
%  produces a separate line.  The error bars are each drawn
%  a distance of U(i) above and L(i) below the points in
%  (X,Y) so that each bar is L(i) + U(i) long. SYMBOL is
%  a string that controls the line type, plotting symbols
%  and color for the X-Y plot.
%
%  ERRORBAR(X,Y,L) plots X versus Y with an error bar that
%  is symmetric about Y and is 2*L(i) long.
%
%  ERRORBAR(Y,L) plots Y with error bars [Y-L Y+L].
%
%  For example,
%
%   x = 1:10;
%   y = sin(x);
%   e = std(y)*ones(size(x));
%   errorbar(x,y,e)
%
%  draws symmetric error bars of unit standard deviation.
%  L. Shure 5-17-88, 10-1-91 B.A. Jones 4-5-93
%  Copyright (c) 1984-93 by The MathWorks, Inc.
if min(size(x))==1,
npt = length(x);
x = x(:);
y = y(:);
if nargin == 3,
l = l(:);
elseif nargin == 4 | nargin == 5
l = l(:);
u = u(:);
end
else
[npt,n] = size(x);
end
if nargin == 3,
u = l;
end
if nargin == 2
l = y;
u = y;
y = x;
[m,n] = size(y);
x(:) = [1:npt]'*ones(1,n);;
end
if isstr(x) | isstr(y) | isstr(l) | isstr(u)
error('Arguments must be numeric.')
end
if any(size(x)~=size(y)) | any(size(x)~=size(l)) |
any(size(x)~=size(u)),
error('The sizes of X, Y, L and U must be the same.');
end
tee = (max(x(:))-min(x(:)))/100;  % make tee .02
% x-distance for
% error bars
xl = x - tee;
xr = x + tee;
n = size(y,2);
% Plot graph and bars
cax = newplot;
next = lower(get(cax,'NextPlot'));
% build up nan-separated vector for bars
xb = [];
yb = [];
nnan = nan*ones(1,n);
for i = 1:npt
ytop = y(i,:) + u(i,:);
ybot = y(i,:) - l(i,:);
xb = [xb; x(i,:); x(i,:) ; nnan;
xl(i,:);xr(i,:);nnan;xl(i,:);xr(i,:);nnan];
yb = [yb; ytop;ybot;nnan;ytop;ytop;nnan;ybot;ybot;nnan];
end
% MODIFIED 04/01/94 BY JOHN L. GALENSKI III
% IF X AND Y ARE MxN ARRAYS, MATLAB WILL CYCLE
% THROUGHT COLORS ON A COLOR MONITOR IF 'SYMBOL'
% IS NOT GIVEN.  ON A MONOCHROME MONITOR, MATLAB
% WILL CYCLE THROUGH THE LINE STYLES DEFINED IN
% THE AXES 'LineStyleOrder' PROPERTY.
if nargin ~= 5 & min(size(x)) == 1 & min(size(y)) == 1
symbol = '-';
plot(xb,yb,x,y,symbol)
else
plot(xb,yb,x,y)
end
```

(c) Copyright 1994 by The MathWorks, Inc.