cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • See how to interactively organize and restructure data for analysis. Register for May 29 webinar, 2pm US ET.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
BHarris
Level VII

Difference of lines

Suppose I have two lines, distance vs. time for two different moving objects.  The time measurements for object 1 and object 2 are at arbitrary times, i.e., the measured times for object 1 aren't the same times as provided for object 2.

 

Is there a way in Graph Builder to plot the *difference* between those curves vs. time?

12 REPLIES 12
XanGregg
Staff

Re: Difference of lines

Here's a low scripting alternative using the Save Formula command available in the red triangle menu for a Smoother or Line of Fit element.

XanGregg_0-1631541150941.png

 

Starting with Craige's ab.jmp table using Overlay to get two lines/curves, use Save Formula to get a new column with a formula that looks like:

 

If( :Source Table == "a", Spline Eval( ... ), :Source Table == "b", Spline Eval( ... ), . ))

 

Go into the Formula Editor for the new column and change the formula to subtract the two Spline expressions:

 

Spline Eval( ... ) - Spline Eval( ... )

 

And use that as the Y in GB.

XanGregg_1-1631541420331.png

 

BHarris
Level VII

Re: Difference of lines

Due to some bizarre licensing problems* I was only finally able to try this today.  It works quite well, very elegant!

 

Two questions:

 

  1. Is JSL powerful enough to make that formula change for me?  So that whole process could be scripted into a .jsl script?
  2. I expected the difference curve to update as I changed the lambda on the smoother but it doesn't.  Looking deeper I see that the "Save formula" is actually saving off the spline parameters, not maintaining a connection back to the actual splines being used.  I presume the latter is not reasonably possible?

Thanks again!

 

 

****************************************

* I was finally forced to update my Mac to 11.6, not realizing that JMP v14 wouldn't work on it.  So I requested v16 through my company, and it literally took months after getting a PO to actually get a v16 license for me.  There was tons of back-and-forth with tax certs and address changes and PO problems.  I can't tell if the problem was my company's supply-chain or JMP/SAS's sales department, but getting a license if you have money in hand really shouldn't be that hard.

 

hogi
Level XIII

Re: Difference of lines

As a combination of the different suggestions, you could also use a simple interpolate() - interpolate() to calculate the difference and then use the lambda setting of the smoother plot to tune the granularity of the curve.

hogi_0-1698514312749.png

Open( "$DOWNLOADS/ab.jmp" );
New Column( "diff",
	Formula(
		rowsA = As Constant( Current Data Table() << get rows where( :Source Table == "a" ) );
		rowsB = As Constant( Current Data Table() << get rows where( :Source Table == "b" ) );
		xA = As Constant( :time[rowsA] );
		xB = As Constant( :time[rowsB] );
		posA = As Constant( :position[rowsA] );
		posB = As Constant( :position[rowsB] );
		If( Min( xA ) <= :time <= Max( xA ) & Min( xB ) <= :time <= Max( xB ),
			Interpolate( :time, xA, posA ) - Interpolate( :time, xB, posB ),
			.
		);
	)
);
Graph Builder(
	Variables( X( :time ), Y( :diff ), Y( :position ), Overlay( :Source Table ) ),
	Elements( Position( 1, 1 ), Points( X, Y, Overlay( 0 ), Legend( 1 ) ), Smoother( X, Y, Overlay( 0 ), Lambda( 0.02 ) ) ),
	Elements( Position( 1, 2 ), Points( X, Y ), Smoother( X, Y ) )
);

Recommended Articles