I teach Outlier Box plots and wrote a script to add the entire length of the whisker so I can visually show my class how the whiskers are calculated. The script works great unless my columns are locked. Why would locking the columns impact my script? After the script runs I saved the script to a script window and it is correct, but it will not draw out the whiskers on some groups. Here is my script, I am still working on it, I am using JMP Pro 17.0.0 on a MacBook:
Names Default To Here( 0 );
Clear Log();
dt = Current Data Table();
If( Not( Is Scriptable( dt ) ),
// Check that there is a data set open;
// ca=Caption("Please Open Design Data Set", Back Color(yellow));
// Stop();
dtsel = Pick File( "Open File", {"JMP|jmp", "All files|*"} );
If( dtsel == "",
Stop(),
Try( dt = Open( dtsel ), Stop() )
);
);
output = Expr(
dt2 = Data Table( dt ) << Summary(
Group( bycol ),
Median( nm ),
Interquartile Range( nm ),
Quantiles( 25, nm ),
Quantiles( 75, nm ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
columnnamemedian = Column( dt2, 3 ) << Get Name;
columnnamesample = Column( dt2, 2 ) << Get Name;
columnnamegroup = Column( dt2, 1 ) << Get Name;
columnameIQR = Column( dt2, 4 ) << Get Name;
columnname25 = Column( dt2, 5 ) << Get Name;
columnname75 = Column( dt2, 6 ) << Get Name;
Medians = Column( dt2, columnnamemedian ) << Get As Matrix;
Samplesize = Column( dt2, columnnamesample ) << Get As Matrix;
Groups = Column( dt2, columnnamegroup ) << Get As Matrix;
IQR = Column( dt2, columnameIQR ) << Get As Matrix;
Q25 = Column( dt2, columnname25 ) << Get As Matrix;
Q75 = Column( dt2, columnname75 ) << Get As Matrix;
meanno = N Rows( dt2 );
LWhis = {};
UWhis = {};
i = 1;
For( i = 1, i <= meanno, i++,
LWhis[i] = Q25[i] - 1.5 * IQR[i];
UWhis[i] = Q75[i] + 1.5 * IQR[i];
Show( Q25[i] );
Show( Q75[i] );
Show( LWhis[i] );
Show( UWhis[i] );
Show( IQR[i] );
Show( i );
If( LWhis[i] > Q25[i],
LWhis[i] = Q25[i],
LWhis[i] = LWhis[i]
);
If( UWhis[i] < Q75[i],
UWhis[i] = Q75[i],
UWhis[i] = UWhis[i]
);
);
MinLW = LWhis[1];
MaxUW = UWhis[1];
i = 1;
For( i = 1, i <= meanno, i++,
If( LWhis[i] < MinLW,
MinLW = LWhis[i],
MinLW = MinLW
);
If( UWhis[i] > MaxUW,
MaxUW = UWhis[i],
MaxUW = MaxUW
);
);
If( MinLW < 0,
MinLW = MinLW * 1.1,
MinLW = MinLW * 0.9
);
If( MaxUW < 0,
MaxUW = MaxUW * 0.9,
MaxUW = MaxUW * 1.1
);
Current Data Table( dt );
//Close(dt2, NoSave);
gb = Graph Builder(
Variables( X( (Column( bycol )) ), Y( Column( nm ) ) ),
Elements( Points( X, Y ), Box Plot( X, Y ) ),
SendToReport(
Dispatch( {} ),
),
);
gbr = gb << report;
Report( gb )[AxisBox( 2 )] << Max( MaxUW ) << Min( MinLW );
i = 1;
For( i = 1, i <= meanno, i++,
Show( LWhis[i] );
Show( UWhis[i] );
Eval(
Eval Expr(
gbr[Framebox( 1 )] << Add graphics Script(
Pen Color( Red );
Line Style( "Dotted" );
V Line( Expr( i ), Expr( LWhis[i] ), Expr( Q25[i] ) );
V Line( Expr( i ), Expr( Q75[i] ), Expr( UWhis[i] ) );
);
)
)
;
);
//dt2 << Minimize Window;
Close( dt2, Nosave );
);
w = New Window( "Variables",
<<Modal,
<<Bring Window to Front,
Border Box( top( 20 ), bottom( 20 ), Left( 20 ), Right( 20 ),
V List Box( // V and H lists nest to organize the display boxes
Text Box(
"Enter the Variables for the Calculations:",
<<horizontal alignment( "Left" ),
),
Spacer Box( size( 1, 30 ) ),
Border Box( Left( 3 ), top( 2 ),
V List Box(
H List Box(
Panel Box( "Columns", colListData = Col List Box( All, width( 130 ), nLines( 10 ) ) ),
V List Box(
Panel Box( "Selected Columns",
Lineup Box( N Col( 2 ), Spacing( 3 ),
Button Box( "Column to Analyze",
colListW << Append( colListData << GetSelected )
),
colListW = Col List Box( width( 130 ), nLines( 1 ), MinItems( 1 ) ),
Button Box( "Grouped by", colby << Append( colListData << GetSelected ) ),
colby = Col List Box( width( 130 ), nLines( 1 ), MinItems( 0 ) ),
),
),
),
Panel Box( "Action",
Lineup Box( N Col( 1 ),
Button Box( "OK",
nm = colListW << Get Items;
bycol = colby << Get Items;
nitemsby = N Items( bycol );
Eval( output );
<<Close Window;
),
Button Box( "Cancel",
),
Text Box( " " ),
Button Box( "Remove", colListW << RemoveSelected ),
)
)
),
)
),
)
)
);