Salut,
Je veux écrire un script avec une boucle for pour générer des box plots 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.
J'ai 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 changerait pour tous les jeux ('Badminton', 'Table Tennis', 'Lawn Tennis'). Le script JMP lirait également un autre fichier contenant la ligne de référence et superposerait les lignes de référence d'un jeu particulier à cette intrigue particulière.
S'il vous plaît aider à é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 |
| un | Nord | 2 | 2 | 3 |
| un | Nord | 3 | 6 | 3 |
| un | Nord | 4 | 6 | 5 |
| un | Nord | 5 | 2 | 2 |
| un | Nord | 2 | 5 | 6 |
| un | Nord | 4 | 5 | 6 |
| un | Nord | 4 | 3 | 6 |
| un | Nord | 4 | 5 | 2 |
| un | Nord | 9 | 7 | 6 |
| un | 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 ne prennent en charge que les valeurs inférieure, moyenne et supérieure.
Voici un script simple qui fonctionne avec les tableaux de données que vous avez fournis, 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]
)
)
)
);