Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: ErrorBars.m
Replies: 0

 Bruce Alan Fast Posts: 3 Registered: 12/7/04
ErrorBars.m
Posted: Jul 21, 1996 8:41 PM

mharm@gizmo.usc.edu (Mike Harm) wrote:
>> I'm using the Graphics package to do some bar charts.
>> I've figured out how to do it, but how does one add
>> error bars to the bars, to indicate statistical standard
>> error? Any insights?

dsmith@psy.ucsd.edu wrote:
> Maybe there is a way of combining ErrorListPlot with BarChart (if
> anyone knows?)

Locally we've used this package "ErrorBars.m", which uses more
primitive graphics commands ("Rectangle") to make error bars,
rather than building on BarChart. It was actually made to provide
'caps' to the bars, and to show both delta-x and delta-y errors.
We made it work on *our* data, maybe it will work for you...

(* ********************************************************************* *)
(* ** file "ErrorBars.m" ***********2/20/96 Bruce.Fast@Colorado.EDU***** *)
(* ********************************************************************* *)
(* ******* see examples of usage at end of this file .... ************* *)
(* ********************************************************************* *)
BeginPackage["ErrorBars`"];

ErrorBars::usage =
"ErrorBars[{{y1, dy1}, {y2, dy2}, ...}] plots a list of data with error bars.
ErrorBars[{{x1, y1, dy1}, ...}] allows x, as well as y, positions to
be specified.
ErrorBars[{{x1, y1, dx1, dy1}, ...}] allows for horizontal (x) error bars
In addition to the usual Graphics options there are four more,
with default values PointSz->0.015, BarWidth->0.018, CapWidth->0.022
(all of which are fractional value of window width),
and BarColor->Hue[0.55]";

Options[ErrorBars] = Flatten[{Options[Graphics],
PointSz ->0.015,
BarWidth->0.018,
CapWidth->0.022,
BarColor->Hue[0.55]
}];

SetOptions[ErrorBars, Axes -> Automatic, PlotRange -> All];

Begin["`Private`"];

ErrorBars[l4:{{_, _, _, _}..},opts___] := Module[{optl={opts}, ar, rng, r,
barwid, xbarwid, ybarwid, capwid, xcapwid, ycapwid, pltrng,
capthk=0.004, xcapthk, ycapthk, xbw, xcw, xct, pntsiz, barcolor},
barcolor=BarColor /. optl /. Options[ErrorBars];
pntsiz =PointSz /. optl /. Options[ErrorBars];
barwid =BarWidth /. optl /. Options[ErrorBars];
capwid =CapWidth /. optl /. Options[ErrorBars];
ar = N[AspectRatio /. optl /. Options[ErrorBars]];
optl = Flatten[{optl, Options[ErrorBars]}];
optl = DeleteCases[optl, BarColor->_];
optl = DeleteCases[optl, PointSz->_];
optl = DeleteCases[optl, BarWidth->_];
optl = DeleteCases[optl, CapWidth->_];
rng = 0.5(Max[Transpose[l4][[2]]+Abs[Transpose[l4][[4]]]]-
Min[Transpose[l4][[2]]-Abs[Transpose[l4][[4]]]]);
If[rng==0,rng=1];
{ycapthk, xbarwid} = N[rng {capthk, barwid}];
rng = 0.5(Max[Transpose[l4][[1]]+Abs[Transpose[l4][[3]]]]-
Min[Transpose[l4][[1]]-Abs[Transpose[l4][[3]]]]);
If[rng==0,rng=1];
{xcapthk, ybarwid} = N[ar rng {capthk, barwid}];
xcapwid = xbarwid capwid / barwid;
ycapwid = ybarwid capwid / barwid;
r = (pntsiz/barwid){ybarwid,xbarwid};
Show[ Graphics[ Module[ {i, x, y, dx, dy} ,
Table[ {x, y, dx, dy} = l4[[i]] ;
{xcw,xct,xbw}=If[dx==0,{0,0,0},{xcapwid,xcapthk,xbarwid}]; {
{barcolor, Rectangle[{x-dx, y-xbw}, {x+dx, y+xbw}]},
{Rectangle[{x-dx-xct,y-xcw},{x-dx+xct,y+xcw}]},
{Rectangle[{x+dx-xct,y-xcw},{x+dx+xct,y+xcw}]},
{barcolor, Rectangle[{x-ybarwid, y-dy}, {x+ybarwid, y+dy}]},
{Rectangle[{x-ycapwid,y-dy-ycapthk},{x+ycapwid,y-dy+ycapthk}]},
{Rectangle[{x-ycapwid,y+dy-ycapthk},{x+ycapwid,y+dy+ycapthk}]},
{GrayLevel[0], Disk[{x, y},r]}
} , {i, Length[l4]}]
]], Sequence @@ optl ]];

ErrorBars[l3:{{_, _, _}..},opts___] := Module[{i},
ErrorBars[ Table[ Insert[l3[[i]], 0, 3], {i, Length[l3]}], opts] ]

ErrorBars[l2:{{_, _}..},opts___] := Module[ {i},
ErrorBars[ Table[ Prepend[l2[[i]], i], {i, Length[l2]}], opts] ]

End[ ];
EndPackage[ ];

(* ************************************************** *)
(* ******************* EXAMPLE 1 ******************** *)
(* ************************************************** *)
(*

ErrorBars[Table[ { i,i^2},{i,10}] ];

ErrorBars[Table[ { i,i^2},{i,10}], PlotRange->All];

*)
(* ************************************************** *)
(* ******************* EXAMPLE 2 ******************** *)
(* ************************************************** *)
(*

data = {{1.0, 1.0, 0.15},
{2.5, 2.7, 0.10},
{1.0, 2.7, 0.08},
{2.0, 1.0, 0.21}};

ErrorBars[ data,
PointSz ->0.025,
BarWidth->0.018,
CapWidth->0.022,
BarColor->Hue[0.23]];

ErrorBars[ data,
PointSz ->0.025,
BarWidth->0.018,
CapWidth->0.022,
BarColor->Hue[0.23],
PlotRange->{{0,3},{0,3}}];

ErrorBars[ data,
PointSz ->{0.027,0.022},
BarWidth->0.018,
CapWidth->0.022,
BarColor->Hue[0.23],
PlotRange->{{0,3},{0,3}}];

*)
(* ************************************************** *)
(* ******************* EXAMPLE 3 ******************** *)
(* ************************************************** *)
(*
ErrorBars[ Table[ { 8Sin[j Pi/6], 8Cos[j Pi/6], Random[], Random[]},
{j,12}],
PlotLabel->"ErrorBars for both dx and dy"
];

ErrorBars[ Table[ { 8Sin[j Pi/6], 8Cos[j Pi/6], Random[]},
{j,12}],
PlotLabel->"ErrorBars for dy only"
];
*)
(* ************************************************** *)
(* ******************* EXAMPLE 4 ******************** *)
(* ************************************************** *)
(*
ErrorBars[ Table[ { 8Sin[j Pi/6], 8Cos[j Pi/6], Random[], Random[]},{j,12}],
PointSz ->0.012,
BarWidth->0.019,
CapWidth->0.024,
BarColor->Hue[0.25],
PlotLabel->"ErrorBars with all the trimmings"
];

*)
(* ************************************************** *)
(* ******************* EXAMPLE 5 ******************** *)
(* ************************************************** *)
(*

errjunk = { {0.04, 0.0336667, 0.0001, 0.0011547},
{0.09, 0.292, 0.0004, 0.0001},
{0.16, 0.833667, 0.004, 0.00288675},
{0.26, 1.27867, 0.016, 0.0521455},
{0.40, 2.83067, 0.0007, 0.0110151},
{0.60, 3.08467, 0.001, 0.0442869},
{1.01, 3.16967, 0.0052, 0.0580546}};

ErrorBars[ errjunk, PlotLabel->"only default options" ]

ErrorBars[ errjunk, PointSz->0.00, BarWidth->0.007, CapWidth->0.009,
PlotLabel->"PointSz->0, BarWidth->0.007, CapWd->0.009"];

ErrorBars[ errjunk, PointSz->0.00, BarWidth->0.007, CapWidth->0.009,
PlotRange->{{-0.2,1.2},{0,3.2}},
PlotLabel->"...plus specifying PlotRange"
];
*)