Re: Using Locators in Mathematica v6
- To: mathgroup at smc.vnet.net
- Subject: [mg76546] Re: [mg76443] Using Locators in Mathematica v6
- From: DrMajorBob <drmajorbob at bigfoot.com>
- Date: Wed, 23 May 2007 05:45:27 -0400 (EDT)
- References: <8414877.1179846748964.JavaMail.root@m35>
- Reply-to: drmajorbob at bigfoot.com
This is my first try with Dynamic and all that, so it's far more clumsy =
=
than necessary, I'm sure.
But here goes:
(* a Plot routine *)
Clear[fit]
fit[drop_Integer?NonNegative, data_List] :=
Block[{x, err, f, g, pruned, min = Min@data, max = Max@data},
err@{a_, b_} := Abs[f[a] - b];
f[x_] = Fit[data, {1, x}, x];
pruned = Drop[SortBy[data, err], -drop];
g[x_] = Fit[pruned, {1, x}, x];
Show[Graphics@Text["dropped outliers: " <> ToString[drop], {4, 4}],
Graphics@AbsolutePointSize[3], ListPlot@pruned,
Plot[f[x], {x, min, max}],
Plot[g[x], {x, min, max}, PlotStyle -> {Red, Dashed}],
ImageSize -> 300, AspectRatio -> 1]
]
(* test data *)
data = Array[{0, 1} RandomReal[NormalDistribution[0, .5]] + {1, -1}
RandomReal[NormalDistribution[0, 1]] &, {30}];
outliers =
Array[{0, 1} RandomReal[NormalDistribution[0, 2.5]] + {1, -1}
RandomReal[NormalDistribution[0, 1]] &, {7}];
all = Join[data, outliers];
(*
DynamicModule[{d = 0},
Column[{Slider[Dynamic[d], {0, Length[all] - 3, 1}],
Dynamic[Graphics[ControlActive[fit[d, all], fit[d, all]]],
SynchronousUpdating -> Automatic]}]]
Bobby
On Tue, 22 May 2007 01:53:54 -0500, Coleman, Mark =
<Mark.Coleman at LibertyMutual.com> wrote:
> Greetings,
>
> I've been exploring some of the new dynamic interface elements in =
> Mathematica v6
> and I must say they are very impressive indeed. I've managed to set-up=
> some useful examples using Manipulate. Unfortunately the documentation=
> of
>
> One example I am working on involves the use of Locators. The example
> itself seem straightforward but I cannot quite get the effect I am
> looking for. I am hoping someone on MathGroup can point me in the rig=
ht
> direction.
>
> Briefly, I want to illustrate the effects that outlier points an have =
on
> a line of best fit. For my example, I generate a small random set of
> points (x(i), y(i)), where y(i) = a + b x(i) + randomerror(i), for
> values a and b. I then calculate the line of best fit using Fit[ ]. I
> next ListPlot[ ] the underlying set of points and overlay the resultin=
g
> line from Fit[ ]. So far very simple.
>
> In my dynamic example, I'd like to have a locator button appear on the=
> graph such that the (x,y) location of the locator becomes an additiona=
l
> data point in the overall data set, and thereafter a new line of best
> fit is calcuated and displayed. Thus as the user moves the locator, a
> new best fit line is displayed.
>
> I'd appreciate any assistance other readers might offer.
>
> Thanks,
>
> -Mark
>
-- =
DrMajorBob at bigfoot.com