File: errorbar.m

package info (click to toggle)
octave 10.3.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 145,484 kB
  • sloc: cpp: 335,976; ansic: 82,241; fortran: 20,963; objc: 9,402; sh: 8,756; yacc: 4,392; lex: 4,333; perl: 1,544; java: 1,366; awk: 1,259; makefile: 660; xml: 192
file content (266 lines) | stat: -rw-r--r-- 9,257 bytes parent folder | download
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
########################################################################
##
## Copyright (C) 2000-2025 The Octave Project Developers
##
## See the file COPYRIGHT.md in the top-level directory of this
## distribution or <https://octave.org/copyright/>.
##
## This file is part of Octave.
##
## Octave is free software: you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## Octave is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Octave; see the file COPYING.  If not, see
## <https://www.gnu.org/licenses/>.
##
########################################################################

## -*- texinfo -*-
## @deftypefn  {} {} errorbar (@var{y}, @var{ey})
## @deftypefnx {} {} errorbar (@var{y}, @dots{}, @var{fmt})
## @deftypefnx {} {} errorbar (@var{x}, @var{y}, @var{ey})
## @deftypefnx {} {} errorbar (@var{x}, @var{y}, @var{err}, @var{fmt})
## @deftypefnx {} {} errorbar (@var{x}, @var{y}, @var{lerr}, @var{uerr}, @var{fmt})
## @deftypefnx {} {} errorbar (@var{x}, @var{y}, @var{ex}, @var{ey}, @var{fmt})
## @deftypefnx {} {} errorbar (@var{x}, @var{y}, @var{lx}, @var{ux}, @var{ly}, @var{uy}, @var{fmt})
## @deftypefnx {} {} errorbar (@var{x1}, @var{y1}, @dots{}, @var{fmt}, @var{xn}, @var{yn}, @dots{})
## @deftypefnx {} {} errorbar (@var{hax}, @dots{})
## @deftypefnx {} {@var{h} =} errorbar (@dots{})
## Create a 2-D plot with errorbars.
##
## Many different combinations of arguments are possible.  The simplest form is
##
## @example
## errorbar (@var{y}, @var{ey})
## @end example
##
## @noindent
## where the first argument is taken as the set of @var{y} coordinates, the
## second argument @var{ey} are the errors around the @var{y} values, and the
## @var{x} coordinates are taken to be the indices of the elements
## (@code{1:numel (@var{y})}).
##
## The general form of the function is
##
## @example
## errorbar (@var{x}, @var{y}, @var{err1}, @dots{}, @var{fmt}, @dots{})
## @end example
##
## @noindent
## After the @var{x} and @var{y} arguments there can be 1, 2, or 4
## parameters specifying the error values depending on the nature of the error
## values and the plot format @var{fmt}.
##
## @table @asis
## @item @var{err} (scalar)
## When the error is a scalar all points share the same error value.
## The errorbars are symmetric and are drawn from @var{data}-@var{err} to
## @var{data}+@var{err}.
## The @var{fmt} argument determines whether @var{err} is in the x-direction,
## y-direction (default), or both.
##
## @item @var{err} (vector or matrix)
## Each data point has a particular error value.
## The errorbars are symmetric and are drawn from @var{data}(n)-@var{err}(n) to
## @var{data}(n)+@var{err}(n).
##
## @item @var{lerr}, @var{uerr} (scalar)
## The errors have a single low-side value and a single upper-side value.
## The errorbars are not symmetric and are drawn from @var{data}-@var{lerr} to
## @var{data}+@var{uerr}.
##
## @item @var{lerr}, @var{uerr} (vector or matrix)
## Each data point has a low-side error and an upper-side error.
## The errorbars are not symmetric and are drawn from
## @var{data}(n)-@var{lerr}(n) to @var{data}(n)+@var{uerr}(n).
## @end table
##
## Any number of data sets (@var{x1},@var{y1}, @var{x2},@var{y2}, @dots{}) may
## appear as long as they are separated by a format string @var{fmt}.
##
## If @var{y} is a matrix, @var{x} and the error parameters must also be
## matrices having the same dimensions.  The columns of @var{y} are plotted
## versus the corresponding columns of @var{x} and errorbars are taken from
## the corresponding columns of the error parameters.
##
## If @var{fmt} is missing, the yerrorbars ("~") plot style is assumed.
##
## If the @var{fmt} argument is supplied then it is interpreted, as in normal
## plots, to specify the line style, marker, and color.  In addition,
## @var{fmt} may include an errorbar style which @strong{must precede} the
## ordinary format codes.  The following errorbar styles are supported:
##
## @table @samp
## @item ~
## Set yerrorbars plot style (default).
##
## @item >
## Set xerrorbars plot style.
##
## @item ~>
## Set xyerrorbars plot style.
##
## @item #~
## Set yboxes plot style.
##
## @item #
## Set xboxes plot style.
##
## @item #~>
## Set xyboxes plot style.
## @end table
##
## If the first argument @var{hax} is an axes handle, then plot into this axes,
## rather than the current axes returned by @code{gca}.
##
## The optional return value @var{h} is a handle to the hggroup object
## representing the data plot and errorbars.
##
## Note: For compatibility with @sc{matlab} a line is drawn through all data
## points.  However, most scientific errorbar plots are a scatter plot of
## points with errorbars.  To accomplish this, add a marker style to the
## @var{fmt} argument such as @qcode{"."}.  Alternatively, remove the line
## by modifying the returned graphic handle with
## @code{set (h, "linestyle", "none")}.
##
## Examples:
##
## @example
## errorbar (@var{x}, @var{y}, @var{ex}, ">.r")
## @end example
##
## @noindent
## produces an xerrorbar plot of @var{y} versus @var{x} with @var{x}
## errorbars drawn from @var{x}-@var{ex} to @var{x}+@var{ex}.  The marker
## @qcode{"."} is used so no connecting line is drawn and the errorbars
## appear in red.
##
## @example
## @group
## errorbar (@var{x}, @var{y1}, @var{ey}, "~",
##           @var{x}, @var{y2}, @var{ly}, @var{uy})
## @end group
## @end example
##
## @noindent
## produces yerrorbar plots with @var{y1} and @var{y2} versus @var{x}.
## Errorbars for @var{y1} are drawn from @var{y1}-@var{ey} to
## @var{y1}+@var{ey}, errorbars for @var{y2} from @var{y2}-@var{ly} to
## @var{y2}+@var{uy}.
##
## @example
## @group
## errorbar (@var{x}, @var{y}, @var{lx}, @var{ux},
##           @var{ly}, @var{uy}, "~>")
## @end group
## @end example
##
## @noindent
## produces an xyerrorbar plot of @var{y} versus @var{x} in which
## @var{x} errorbars are drawn from @var{x}-@var{lx} to @var{x}+@var{ux}
## and @var{y} errorbars from @var{y}-@var{ly} to @var{y}+@var{uy}.
## @seealso{semilogxerr, semilogyerr, loglogerr, plot}
## @end deftypefn

function h = errorbar (varargin)

  [hax, varargin] = __plt_get_axis_arg__ ("errorbar", varargin{:});

  oldfig = [];
  if (! isempty (hax))
    oldfig = get (0, "currentfigure");
  endif
  unwind_protect
    hax = newplot (hax);

    htmp = __errplot__ ("errorbar", hax, varargin{:});

    if (! ishold ())
      set (hax, "box", "on");
    endif
  unwind_protect_cleanup
    if (! isempty (oldfig))
      set (0, "currentfigure", oldfig);
    endif
  end_unwind_protect

  if (nargout > 0)
    h = htmp;
  endif

endfunction


%!demo
%! clf;
%! rand_1x11_data1 = [0.82712, 0.50325, 0.35613, 0.77089, 0.20474, 0.69160, 0.30858, 0.88225, 0.35187, 0.14168, 0.54270];
%! rand_1x11_data2 = [0.506375, 0.330106, 0.017982, 0.859270, 0.140641, 0.327839, 0.275886, 0.162453, 0.807592, 0.318509, 0.921112];
%! errorbar (0:10, rand_1x11_data1, 0.25*rand_1x11_data2);
%! title ("errorbar() with Y errorbars");

%!demo
%! clf;
%! rand_1x11_data3 = [0.423650, 0.142331, 0.213195, 0.129301, 0.975891, 0.012872, 0.635327, 0.338829, 0.764997, 0.401798, 0.551850];
%! rand_1x11_data4 = [0.682566, 0.456342, 0.132390, 0.341292, 0.108633, 0.601553, 0.040455, 0.146665, 0.309187, 0.586291, 0.540149];
%! errorbar (0:10, rand_1x11_data3, rand_1x11_data4, ">");
%! title ("errorbar() with X errorbars");

%!demo
%! clf;
%! x = 0:0.5:2*pi;
%! err = x/30;
%! y1 = sin (x);
%! y2 = cos (x);
%! errorbar (x, y1, err, "~", x, y2, err, ">");
%! legend ("Y errbar", "X errbar");
%! title ("errorbar() with 2 datasets");

%!demo
%! clf;
%! x = 0:0.5:2*pi;
%! err = x/30;
%! y1 = sin (x);
%! y2 = cos (x);
%! errorbar (x, y1, err, err, "#r", x, y2, err, err, "#~");
%! legend ("X errbox", "Y errbox");
%! title ("errorbar() with error boxes");

%!demo
%! clf;
%! x = 0:0.5:2*pi;
%! err = x/30;
%! y1 = sin (x);
%! y2 = cos (x);
%! errorbar (x, y1, err, err, err, err, "~>", ...
%!           x, y2, err, err, err, err, "#~>-*");
%! legend ("X-Y errbars", "X-Y errboxes");
%! title ("errorbar() with X-Y errorbars and error boxes");

## Invisible figure used for tests
%!shared hf, hax
%! hf = figure ("visible", "off");
%! hax = axes ();

%!error errorbar ()
%!error errorbar (1)
%!error <data argument 1 must be numeric> errorbar (hax, {1}, 2)
%!error <data argument 2 must be numeric> errorbar (hax, 1, {2})
%!error <size of argument 2 does not match others> errorbar (hax, 1, 1:2)
%!error <size of argument 3 does not match others> errorbar (hax, 1, 2, 3:4)
%!error <too many arguments to plot> errorbar (1,2,3,4,5,6,7)

%!error <2 column errorplot is only valid for xerr> errorbar (1,2, "~>")
%!error <6 columns only valid for xyerr and boxxy> errorbar (1,2,3,4,5,6, "~")
%!error <error plot requires 2, 3, 4, or 6 arguments> errorbar (1,2,3,4,5)

## Close figure used for testing
%!test
%! close (hf);