cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • We’re improving the Learn JMP page, and want your feedback! Take the survey
Choose Language Hide Translation Bar
Karen1
Level I

Help to put specs on a bivariate plot with grouping variables

 

Hello,

I’ll use Big Class as an example of what Im trying to do. Let’s say I want to plot weight (Y) vs height (X) , using age and sex as BY variables. But in my case, I cannot predict how many levels the BY variables will have.  For each bivariate plot, I fit a line. I want to add vertical reference lines at the lower and upper spec limits of “height”, and horizontal reference lines at the lower and upper spec limits of “weight”.  I have these spec limit values in columns of my table. Within each combination of age and sex the spec limits are constant (not varying row to row), but the spec limits vary between these combinations. How can I do this in JMP 18?  

I thought to make a summary table with all of the values I need.  

 

 

dt = Data Table( "Big Class" );
rep=Bivariate(
	SendToByGroup( Bygroup Default ),
	Y( :weight ),
	X( :height ),
	Fit Line(
		{Confid Curves Fit( 1 ), Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} )
		}
	),
	By( :age, :sex ),
);

summary = dt << Summary(
	Group( :age, :sex, :LSL_Height,:USL_Height,:LSL_Weight,:USL_Weight ),
	Freq( "None" ),
	Weight( "None" ),
	output table name( "Summary of Big Class grouped by age, sex" )
);

 

Unfortunately this doesn't work:

 

 


for (i=1,i<= n rows(summary), i++,
rep <<	EVAL(SendToByGroup(
		{:age == eval(age[i]), :sex == eval(sex[i])},
		SendToReport(
			Dispatch( {}, "height", ScaleBox,
				{Add Ref Line( eval(LSL_Height[i]), "Solid", "Red", "", 1 ),
				Add Ref Line( eval(uSL_Height[i]), "Solid", "Red", "", 1 )
				}
			)
		),
		SendToReport(
			Dispatch( {}, "Weight", ScaleBox,
				{Add Ref Line( eval(LSL_Weight[i]), "Solid", "Black", "", 1 ),
				Add Ref Line( eval(uSL_Weight[i]), "Solid", "Black", "", 1 )
				}
			)
		),
	);

)
);

Thank you

 

2 REPLIES 2
jthi
Super User

Re: Help to put specs on a bivariate plot with grouping variables

Do note that the axis do not auto-scale based on reference lines

Names Default To Here(1); 

dt = open("$SAMPLE_DATA/Big Class.jmp");

dt_specs = dt << Summary(
	Group(:sex),
	Quantiles(25, :height),
	Quantiles(25, :weight),
	Quantiles(75, :height),
	Quantiles(75, :weight),
	Freq("None"),
	Weight("None"),
	Link to original data table(0),
	output table name("spec limits by sex")
);
Column(dt_specs, "Quantiles25(height)") << Set Name("LSL_Height");
Column(dt_specs, "Quantiles25(weight)") << Set Name("LSL_Weight");
Column(dt_specs, "Quantiles75(height)") << Set Name("USL_Height");
Column(dt_specs, "Quantiles75(weight)") << Set Name("USL_Weight");


bivs = dt << Bivariate(
	SendToByGroup(Bygroup Default),
	Y(:weight),
	X(:height),
	Fit Line({Confid Curves Fit(1), Confid Shaded Fit(1), Line Color({212, 73, 88})}),
	By(:age, :sex),
	Group Options(Return Group(0)) // makes this easier but can slighlty complicate other things
);

For Each({biv}, bivs,
	rep = Report(biv);
	biv_title = rep << get title;
	cur_age = Word(-1, biv_title, "=");
	spec_row = dt_specs << Get Rows Where(:sex == cur_age);
	
	// X-Axis
	rep[AxisBox(2)] << Add Ref Line(dt_specs[spec_row, "LSL_Height"][1], "Dashed", blue, "LSL", 2);
	rep[AxisBox(2)] << Add Ref Line(dt_specs[spec_row, "USL_Height"][1], "Dashed", blue, "USL", 2);
	
	// Y-Axis
	rep[AxisBox(1)] << Add Ref Line(dt_specs[spec_row, "LSL_Weight"][1], "Dashed", blue, "LSL", 2);
	rep[AxisBox(1)] << Add Ref Line(dt_specs[spec_row, "USL_Weight"][1], "Dashed", blue, "USL", 2);
);
-Jarmo
txnelson
Super User

Re: Help to put specs on a bivariate plot with grouping variables

I find it more convenient to use this method to modify the output display

txnelson_0-1748173406967.png

Names Default To Here( 1 );
dt = Data Table( "Big Class_withSpecs" );
rep = dt << Bivariate(
	SendToByGroup( Bygroup Default ),
	Y( :weight ),
	X( :height ),
	Fit Line( {Confid Curves Fit( 1 ), Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} )} ),
	By( :age, :sex ),

);

summary = dt << Summary(
	Group( :age, :sex, :LSL_Height,:USL_Height,:LSL_Weight,:USL_Weight ),
	Freq( "None" ),
	Weight( "None" ),
	output table name( "Summary of Big Class grouped by age, sex" )
);

For( i = 1, i <= N Rows( summary ), i++,
	// There is a separate output display for each by group
	// Set the report to modify 
	reprpt = report(rep[i]);
	// For each report AxisBox(1) is the Y axis and AxisBox(2) is the X axis
	reprpt[AxisBox(1)] << add Ref Line(summary:LSL_Weight[i], "Solid","Red", "", 1  );
	reprpt[AxisBox(1)] << add Ref Line(summary:USL_Weight[i], "Solid","Red", "", 1  );
	reprpt[AxisBox(2)] << add Ref Line(summary:LSL_Height[i], "Solid","Red", "", 1  );
	reprpt[AxisBox(2)] << add Ref Line(summary:USL_Height[i], "Solid","Red", "", 1  );
);
Jim

Recommended Articles