I’m relatively new in JMP JSL. I’m attempting to include multiple control limits into a variability chart and bivariate chart using JSL script for some time. Tested a few times as a preliminary but still not progressing as expected. There’s no chart displayed upon running the JSL script attached.
Rather than continuing, wanted to reach out to the crows and lean on other people's experience/expertise on how to set it up seamlessly. I’ve attached the script mentioned.
Description | File |
JMP JSL script | at=data table("X KPP Last 24 Hours_csv");
/// select data when :complevel_1 == "U1"
at<<SELECT where=""> 0,
Eval(
Substitute(
Expr(
__col__ << set property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Show Limits( 1 )}
)
),
Expr( __col__ ), Parse( "bt:" || colNames[colNamesPosition[1]] ),
Expr( __LSL__ ), btl:LSL[i],
Expr( __USL__ ), btl:USL[i],
)
)
);
);
g1=Outline Box("U1",
bt<<VARIABILITY chart=""></VARIABILITY></SELECT> |
I wanted to automatically plot variability and bivariate chart including its respective control limits.
Description | Example |
Variability chart expectation | Refer to variability chart.jrn |
Bivariate chart expectation | refer to bivariate _Fit Y by X. jrn |
Kindly advise. Keen to know the scripting answer and interactive explanation about it.
Thank you for taking the time to consider this request.
Hi @Danial1,
I just want to inform you that the JMP Variability chart will automatically show Spec Limits so long we set it in the column property (but not Control Limits).
I believe you are trying to show the Spec Limits using LSL and USL.
In your script, there is a minor typo as shown in the image below, after fixing the LCL to LSL and UCL to USL, the script works fine. You may try to re-run it using the script attached.

Also, I believe you are trying to understand the iterative portion of the script.
colNames = bt << get column names( numeric, string );
For( i = 1, i <= N Rows( btl ), i++,
colNamesPosition = Loc( colNames, btl:Parameter[i] );
If( N Rows(colNamesPosition) > 0,
Eval(
Substitute(
Expr(
__col__ << set property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Show Limits( 1 )}
)
),
Expr( __col__ ), Parse( "bt:" || colNames[colNamesPosition[1]] ),
Expr( __LSL__ ), btl:LSL[i],
Expr( __USL__ ), btl:USL[i],
)
)
);
);
I will try to explain that in points form below.
1. Get all column names in the subset table (named U1)
2. Iterate it according to the total number of rows in spec limit table (named btl)
3. Return the matrix of each column in the spec limit table (search 'Loc' under JMP Help > Scripting Index)
4. If there is still remaining columns yet to be loop, then continue to substitute the column properties with LSL and/or USL according to Spec Limit table columns (named btl)
I am not a JSL expert however I hope the above explanation helps!
Hi @lkimhui,
Sincerely appreciate the tips you've provided and thanks for pointing out my mistakes. It worked like a charm!
Another thing that I'm keen to know is whether is there a way I could introduce two sets of limits into the chart for example:
1) Spec limits
2) Control limits
Example as shown below:

Hi @Danial1
Unfortunately, there is no way to introduce Control Limit into any chart by preference now, hence there is no way to introduce two sets of limit into the same chart automatically.
However, please do not hesitate to put in your wishes into the Intel-JMP Wish list.
https://community.jmp.com/t5/Intel-Wish-List/idb-p/intel-ideas