Here is a very simplistic version of a script that will take your example data table, cast a spline fit through each experiment's data points, and then will allow you to draw the lines from experiment 2(blue) to experiment 1(purple), and then across again to experiment 2.
![touch curves.PNG touch curves.PNG](https://community.jmp.com/t5/image/serverpage/image-id/21596i0096DBE3AFD7E075/image-size/large?v=v2&px=999)
Run the script, and then enter a value into the "Exter X value" input box, and then Click on the "create line"
button. This is a very primitive script, and will only work for X values from about 2.5 to 4. However, it will give you an idea on how you can build what you want.
Names Default To Here( 1 );
// Create the sample data table
dt = New Table( "Sample",
Add Rows( 13 ),
New Column( "Experiment",
Character,
"Nominal",
Set Values(
{"exp1", "exp1", "exp1", "exp1", "exp2", "exp2", "exp2", "exp2", "exp3", "exp3", "exp3", "exp3", ""}
)
),
New Column( "V",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0.55, 0.65, 0.85, 1.1, 0.55, 0.65, 0.85, 1.1, 0.55, 0.65, 0.85, 1.1, .] )
),
New Column( "X-axis",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2.16, 2.79, 3.66, 4.19, 2.47, 3.13, 4.15, 4.72, 2.35, 2.95, 3.88, 4.36, 3] )
),
New Column( "Y-axis",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1.183, 2.12, 5.28, 11.2, 1.03, 1.85, 4.54, 9.25, 1.07, 1.93, 4.88, 9.74, .] )
)
);
nw = New Window( "Draw Lines",
hlb = H List Box(
// Generate the graph with the curves
Biv = dt << Bivariate( Y( :Name( "Y-axis" ) ), X( :Name( "X-axis" ) ) ),
V List Box(
Spacer Box( size( 1, 30 ) ),
H List Box( tbMain = Text Box( "Enter X value" ), neb = Number Edit Box() ),
Button Box( "Create Line",
start = neb << get;
// Create a list to hold the starting x,y pair
List1a = {};
List1a[1] = start;
// Find the Y value on experiment 2
fit2Y = Spline Eval( start, fitMat2 );
list1a[2] = fit2y;
// Create a list to hold the second x,y pair
list1b = {};
list1b[1] = start;
fit1Y = Spline Eval( start, fitMat1 );
list1b[2] = fit1Y;
// Create a list to hold the third x,y pair, which
// is the same as the second x,y pair
list2a = list1b;
// Create the 4th x,y pair
// to find the final X value, an iteration of the
// experiment 2 spline has to be done until it
// is larger than the experiment 1 Y value
list2b = {};
count = 0;
While( fit2Y < fit1Y | count > 300,
count++;
fit2Y = Spline Eval( start + (.01 * count), fitMat2 );
);
// set the final x,y values
list2b[1] = start + (.01 * count);
list2b[2] = fit1Y;
// Draw the lines
Report( biv )[FrameBox( 1 )] << add graphics script(
Pen Color( "red" );
Pen Size( 2 );
Line( list1a, list1b );
Line( list2a, list2b );
);
)
)
)
);
// add the spline fits and get the prediction matricies for each spline
biv << Fit Where( :Experiment == "exp1", Fit Spline( 0.001, {Line Color( "Purple" ), save coefficients} ) );
fitMat1 = Current Data Table() << get as matrix;
Close( Current Data Table(), nosave );
biv << Fit Where( :Experiment == "exp2", Fit Spline( 0.001, {Line Color( "Medium Dark Blue" ), save coefficients} ) );
fitMat2 = Current Data Table() << get as matrix;
Close( Current Data Table(), nosave );
biv << Fit Where(
:Experiment == "exp3",
Fit Spline( 0.001, {Line Color( "Medium Dark Green" ), save coefficients} )
);
fitMat3 = Current Data Table() << get as matrix;
Close( Current Data Table(), nosave );
Jim