cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Get the free JMP Student Edition for qualified students and instructors at degree granting institutions.
Choose Language Hide Translation Bar
View Original Published Thread

Graph Builder Mean Line

JShef
Level I

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();