Package for Dot-Dash scater plots
- To: mathgroup at yoda.physics.unc.edu
- Subject: Package for Dot-Dash scater plots
- From: Gossett <gossett at bethel.edu>
- Date: Sat, 1 Aug 1992 17:19:42 -0500
BeginPackage["ScatterPlot`"]
DotDash::usage = "DotDash[data] produces a dot-dash scatter plot, as defined by Edward Tufte in `The Visual Display of Quantitative Information'.
Examples: DotDash[{{2,5},{2.1,6},{2,5.5},{3,6}}], DotDash[Table[{Random[],Random[]},{i,25}]]"
(* This package may be freely used for non-commercial purposes.
Copyright July 1992
Dr. Eric Gossett
Bethel College
3900 Bethel Drive
St. Paul, MN 55112
gossett at bethel.edu
Version 1.0
*)
Begin["`Private`"]
Unprotect[DotDash]
Off[General::spell1]
xMargin[xvals_,ymin_,yinc_] := Module[{dashes={},i},
For[i=1,i<=Length[xvals],i++,
dashes = Append[dashes,
Line[{{xvals[[i]],ymin-4 yinc},
{xvals[[i]],ymin-2 yinc}}]]];
Return[dashes]
]
yMargin[yvals_,xmin_,xinc_] := Module[{dashes={},i},
For[i=1,i<=Length[yvals],i++,
dashes = Append[dashes,
Line[{{xmin-4 xinc,yvals[[i]]},
{xmin-2 xinc,yvals[[i]]}}]]];
Return[dashes]
]
DotDash[data_] := Module[{xvals,yvals,xt,yt,xrange,
yrange,xmin,xmax,ymin,ymax,xmargin,ymargin,labels},
xvals=Transpose[data][[1]];
yvals=Transpose[data][[2]];
xmin=Min[xvals];
xmax=Max[xvals];
ymin=Min[yvals];
ymax=Max[yvals];
xrange=xmax-xmin;
yrange=ymax-ymin;
xt = .025/GoldenRatio xrange;
yt = .025 yrange;
xmargin = xMargin[xvals,ymin,yt];
ymargin = yMargin[yvals,xmin,xt];
labels=Graphics[
Text[ToString[xmin],{xmin,ymin-9yt},{-1,0}],
Text["xmin",{xmin,ymin-6yt},{-1,0}],
Text[ToString[xmax],{xmax,ymin-9yt},{1,0}],
Text["xmax",{xmax,ymin-6yt},{1,0}],
Text[ToString[ymin],{xmin-6xt,ymin},{1,0}],
Text["ymin",{xmin-6xt,ymin+3yt},{1,0}],
Text[ToString[ymax],{xmin-6xt,ymax},{1,0}],
Text["ymax",{xmin-6xt,ymax+3yt},{1,0}]
];
Show[ListPlot[data,Axes->False,PlotStyle->PointSize[.01],
PlotRange->{{xmin-xt,xmax+xt},{ymin-yt,ymax+yt}},
DisplayFunction->Identity],
Graphics[{Thickness[.001],xmargin,ymargin}],
labels,PlotRange->All,
DisplayFunction->$DisplayFunction]
] /; (MatrixQ[data] && (Dimensions[data][[2]] == 2) )
On[General::spell1];
End[]
Protect[DotDash]
EndPackage[]