Salut,
Je souhaite écrire un script avec une boucle for pour générer des boîtes à moustaches avec des lignes de référence horizontales et l'enregistrer. Je peux également le faire dans le générateur de graphiques, mais mon ensemble de données est énorme, donc l'ajout manuel d'une ligne de référence prendrait trop de temps.
Je dois deux tables de données, une pour générer une table de données et une autre pour générer des lignes de référence.
Je veux avoir une boucle vers Box plot Player (dans ce cas, « a » et « b) sur l'axe X et la colonne commuterait pour tous les jeux (« Badminton », « Tennis de table », « Lawn Tennis »). Le script JMP lirait également un fichier supplémentaire contenant une ligne de référence et des lignes de référence superposées d'un jeu particulier à cette intrigue particulière.
S'il vous plaît, aidez-nous à écrire un script pour cette exigence.
Merci 
| Jeu | Ligne de référence 1 | Ligne de référence 2 |
| Badminton | 7 | 1 |
| Tennis de table | 8 | 2 |
| Tennis sur gazon | 6 | 3 |
| Joueur | Zone | Badminton | Tennis de table | Tennis sur gazon |
| a | Nord | 2 | 2 | 3 |
| a | Nord | 3 | 6 | 3 |
| a | Nord | 4 | 6 | 5 |
| a | Nord | 5 | 2 | 2 |
| a | Nord | 2 | 5 | 6 |
| a | Nord | 4 | 5 | 6 |
| a | Nord | 4 | 3 | 6 |
| a | Nord | 4 | 5 | 2 |
| a | Nord | 9 | 7 | 6 |
| a | Nord | 5 | 0 | 5 |
| b | Sud | 1 | 3 | 7 |
| b | Sud | 2 | 4 | 7 |
| b | Sud | 4 | 7 | 8 |
| b | Sud | 3 | 6 | 3 |
| b | Sud | 6 | 4 | 5 |
| b | Sud | 2 | 2 | 2 |
| b | Sud | 5 | 8 | 6 |
| b | Sud | 6 | 5 | 2 |
| b | Sud | 7 | 2 | 3 |
| b | Sud | 6 | 4 | 6 |
Il faudrait alors utiliser une approche différente. Les limites de réponse prennent uniquement en charge les valeurs inférieure, moyenne et supérieure.
Voici un script simple qui fonctionne avec les tableaux de données que vous avez fournis et qui tracera toutes les lignes de référence
Names Default To Here( 1 );
dtMain = Data Table( "Main" );
dtLimits = Data Table( "Limits" );
// Get the columns to create box plots for
boxPlotList = dtMain << get column names( string, numeric );
// Get the columns that contain limits
refLineList = dtLimits << get column names( string, numeric );
// Loop across the box plot columns and generate the box plots
For( i = 1, i <= N Items( boxPlotList ), i++,
ow = Oneway( Y( Column( boxPlotList[i] ) ), X( :Player ), Box Plots( 1 ) );
// Find out if any reference line references are specified for the current
// box plot column
refLineMatrix = dtLimits << get rows where( :game == boxPlotList[i] );
// If references are found, then loop across the columns and rows in the Limits table
// and add the reference lines
If( N Rows( refLineMatrix ) > 0,
For( refRow = 1, refRow <= N Rows( refLineMatrix ), refRow++,
For( refCol = 1, refCol <= N Items( refLineList ), refCol++,
refLineValue = Column( dtLimits, refLineList[refCol] )[refRow];
Report( ow )[AxisBox( 1 )] << Add Ref Line( refLineValue, "Solid", "Black", "", 1 );
)
)
);
);
Voici un script qui crée d'abord les 2 tables de données que vous avez affichées dans votre première entrée, suivi du code qui copie les limites de la table des limites et les applique à chaque colonne de la table principale
Names Default To Here( 1 );
dtMain = New Table( "Main",
Add Rows( 20 ),
New Column( "Player",
Character,
"Nominal",
Set Values(
{"a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"}
)
),
New Column( "Zone",
Character,
"Nominal",
Set Values(
{"North", "North", "North", "North", "North", "North", "North", "North", "North", "North", "South",
"South", "South", "South", "South", "South", "South", "South", "South", "South"}
)
),
New Column( "Badminton",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2, 3, 4, 5, 2, 4, 4, 4, 9, 5, 1, 2, 4, 3, 6, 2, 5, 6, 7, 6] )
),
New Column( "Table Tennis",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2, 6, 6, 2, 5, 5, 3, 5, 7, 0, 3, 4, 7, 6, 4, 2, 8, 5, 2, 4] )
),
New Column( "Lawn Tennis",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [3, 3, 5, 2, 6, 6, 6, 2, 6, 5, 7, 7, 8, 3, 5, 2, 6, 2, 3, 6] )
)
);
dtLimits = New Table( "Limits",
Add Rows( 3 ),
New Column( "Game",
Character,
"Nominal",
Set Values( {"Badminton", "Table Tennis", "Lawn Tennis"} ),
Set Display Width( 128 )
),
New Column( "Reference Line 1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [7, 8, 6] ) ),
New Column( "Reference Line 2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3] ) )
);
// Here is the code that sets the Response Limits
For( i = 1, i <= N Rows( dtLimits ), i++,
If( Try( (Column( dtMain, (Column( dtLimits, "Game" )[i]) )) << get name, "" ) != "",
Eval(
Substitute(
Expr(
Column( dtMain, Column( dtLimits, "Game" )[i] ) << set property(
"response limits",
{Goal( Maximize ), Lower( __Low__, 1 ), Upper( __up__, 1 ), Importance( 1 ),
Show Limits( 1 )}
)
),
Expr( __Low__ ), dtLimits:Reference Line 2[i],
Expr( __Up__ ),
dtLimits:Reference Line 1[i]
)
)
)
);