Hello,
I would like to have a check box object on top of Graph builder view to toggle on/off separation of overlapping points (jitter). I know that this can be done from control panel but from visualization perspective, I want to keep the control panel closed.
Example script below which creates control elements for jitter on top of graph. Despite of my best efforts, I can't get the check box to toggle the jitter; I don't know what is the correct way to send update to report.
I am requesting Your help with the syntax.
Names Default To Here(1);
dt= Open("$SAMPLE_DATA/Big Class.jmp");
gb=Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements(
Points( X, Y )
)
);
jitter = 1;
jitter_elements=H List Box(
cb=Check Box(
{"Jitter enabled"},
If(cb<<Get()==1,
gb << SendToReport(Elements(Points(Jitter( "Positive Grid" ), Jitter Limit( jitter )))), // This is not correct but something like this (maybe)
gb << SendToReport(Elements(Points(Jitter( "None" )))) // This is not correct but something like this (maybe)
);
),
sb = Slider Box( 0, 2, jitter,
neb << set( jitter );
),
neb = Number Edit Box(jitter,
<<setfunction(
Function( {this},
jitter = this << get;
sb << inval;
)
)
)
);
rgb = Report(gb);
(( rgb[PictureBox(1)] << Parent ) << Child ) << Sib Append (jitter_elements);
Manipulating Elements is a mess to my knowledge and it gets even messier when you have grouping. That's why I try to (usually) avoid it and just redo the graph. Here is one way you could try using Update Elements to change Jitter
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
jitter = 1;
New Window("",
V List Box(
H List Box(
cb = Check Box(
{"Jitter enabled"},
If(cb << Get() == 1,
Report(gb)[GraphBuilderBox(1)] << Update Element(1, 1, 1, {Type("Points"), X, Y, Legend(3), Jitter("Positive Grid"), Jitter Limit(jitter)});
,
Report(gb)[GraphBuilderBox(1)] << Update Element(1, 1, 1, {Type("Points"), X, Y, Legend(3), Jitter("None")});
)
),
sb = Slider Box(0, 2, jitter, neb << set(jitter)),
neb = Number Edit Box(
jitter,
<<setfunction(
Function({this},
jitter = this << get;
sb << inval;
)
)
)
),
gb = dt << Graph Builder(Show Control Panel(1), Variables(X(:height), Y(:weight)), Elements(Points(X, Y)));
)
);
Other useful functions might be Add Elements and Remove Elements, also see this post Updating the Graph Builder's Element statement
Nice idea, not obvious how to do it, looking forward to an answer.
Manipulating Elements is a mess to my knowledge and it gets even messier when you have grouping. That's why I try to (usually) avoid it and just redo the graph. Here is one way you could try using Update Elements to change Jitter
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
jitter = 1;
New Window("",
V List Box(
H List Box(
cb = Check Box(
{"Jitter enabled"},
If(cb << Get() == 1,
Report(gb)[GraphBuilderBox(1)] << Update Element(1, 1, 1, {Type("Points"), X, Y, Legend(3), Jitter("Positive Grid"), Jitter Limit(jitter)});
,
Report(gb)[GraphBuilderBox(1)] << Update Element(1, 1, 1, {Type("Points"), X, Y, Legend(3), Jitter("None")});
)
),
sb = Slider Box(0, 2, jitter, neb << set(jitter)),
neb = Number Edit Box(
jitter,
<<setfunction(
Function({this},
jitter = this << get;
sb << inval;
)
)
)
),
gb = dt << Graph Builder(Show Control Panel(1), Variables(X(:height), Y(:weight)), Elements(Points(X, Y)));
)
);
Other useful functions might be Add Elements and Remove Elements, also see this post Updating the Graph Builder's Element statement
Thanks Jarmo,
Your solution (Update elements) works well, very good.
Below is further modified version to get also the slider and number boxes updating the graph.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
jitter = 0.2;
New Window("",
V List Box(
H List Box(
cb = Check Box(
{"Jitter enabled"},
If(cb << Get() == 1,
Report(gb)[GraphBuilderBox(1)] << Update Element(1, 1, 1, {Type("Points"), X, Y, Legend(3), Jitter("Positive Grid"), Jitter Limit(jitter)});
,
Report(gb)[GraphBuilderBox(1)] << Update Element(1, 1, 1, {Type("Points"), X, Y, Legend(3), Jitter("None")});
)
),
sb = Slider Box(0.1, 0.2, jitter,
neb << set(jitter);
If(cb << Get() == 1,
Report(gb)[GraphBuilderBox(1)] << Update Element(1, 1, 1, {Type("Points"), X, Y, Legend(3), Jitter("Positive Grid"), Jitter Limit(jitter)});
);
),
neb = Number Edit Box(
jitter,
<<setfunction(
Function({this},
jitter = this << get;
if(jitter<0.1, jitter=0.1, jitter>0.2, jitter=0.2);
sb << inval;
If(cb << Get() == 1,
Report(gb)[GraphBuilderBox(1)] << Update Element(1, 1, 1, {Type("Points"), X, Y, Legend(3), Jitter("Positive Grid"), Jitter Limit(jitter)});
);
neb << set(jitter);
)
)
)
),
gb = dt << Graph Builder(Show Control Panel(0), Variables(X(:height), Y(:weight)), Elements(Points(X, Y)));
)
);