cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
JMP is taking Discovery online, April 16 and 18. Register today and join us for interactive sessions featuring popular presentation topics, networking, and discussions with the experts.
Choose Language Hide Translation Bar
JShef
Level I

Graph Builder Mean Line

I have a "points" plot in graph builder. I would like to add a mean line to the plot automatically, like one can do in Fit Y by X by selecting Fit Mean. I want it to happen automatically because I have a local data filter that I want to use to filter my data and each time I do so, I want the mean line to update with the mean of the filtered data. Basically, I would like the Mean Line to behave the same way the Line Of Fit currently does in graph builder in this situation. (You might say I would like to add a 0th order line of fit.)

 

I am very new to jmp, so please have patience with my ignorance. I have been trying to adding a script (Customize>Add script). If I could find a way to call the mean I could add Y Function(mean(), x), but I can't figure out the right way to do it. I guess the mean must be accessible because I can add a caption box that shows the mean (and this mean updates depending on how the data is filtered), but I can't figure out how to access this value. Thanks for any help you might have!

1 REPLY 1

Re: Graph Builder Mean Line

Here is one way to do it  - I use a graphics script for drawing, but the logic for computing the mean and responding to row-state changes is done outside of the drawing.

 

Working: with data table exclude changes and adding or removing of data filters.

 

Needs work: (1) Data table and Y column are hard-coded.  (2) It only works on the most recent report launched from the script.  You can't run it multiple times, or use Redo Analysis to create a second working copy of the report.

 

NamesDefaultToHere(1);

dt=Open("$SAMPLE_DATA/Big Class.jmp");
gb=dt<<Graph Builder(
	Size( 534, 454 ),
	Show Control Panel( 0 ),
	Variables( X( :height ), Y( :weight ) ),
	Elements( Points( X, Y, Legend( 2 ) ) )
);
rpt=(gb<<Report);

// add or update a mean line that honors exclude flags
updateMeanLine=Function({},
	rpt[FrameBox(1)] << Remove Graphics Script(1);

	rs = rpt[FrameBox(1)] << Get Row States;
	val = dt:weight << Get Values;
	inc = Loc(1-(rs&2));
	m = mean(val[inc]);

	Eval(EvalExpr( rpt[FrameBox(1)] << Add Graphics Script(
		Pen Color("red");
		Y Function(Expr(m), x);
		Text Color("red");
		Text({X Origin(), Expr(m)}, "Mean=" || Char(Expr(m)));
	)));
);

// listen for row-state changes to dt or data filter
rsupdate = Function( {a},
	If( Is Matrix( a ),
		// row states have changed
		updateMeanLine(),
		// else (a==-1) indicates that filter may have been added or removed
		rsh = rpt[FrameBox(1)] << Make Row State Handler( dt, rsupdate );
	)
);
rsh = rpt[FrameBox(1)] << Make Row State Handler( dt, rsupdate );

updateMeanLine();