Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?L'exemple de script suivant provenant d'un fil de discussion précédent (résolu, grâce à @jthi ) me permet de tracer la variable Y sous forme de points d'une liste.
je veux ajouter Boîtes à moustaches en plus de Points dans mon tableau. Comment ajouter des boîtes à moustaches dans le script ci-dessous ?
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);Automatisation et scriptsles fenêtresRe : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?Créer le graphique de manière interactive dans JMP

placez le script dans votre presse-papiers/fenêtre de script
Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:name), Y(:age), Y(:sex), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(1)), Box Plot(X, Y, Legend(5))),
Elements(Position(1, 2), Points(X, Y, Legend(2)), Box Plot(X, Y, Legend(6))),
Elements(Position(1, 3), Points(X, Y, Legend(3)), Box Plot(X, Y, Legend(7))),
Elements(Position(1, 4), Points(X, Y, Legend(4)), Box Plot(X, Y, Legend(8))),
SendToReport(
Dispatch(
{},
"400",
LegendBox,
{Legend Position(
{1, [0], 5, [4, -3], 2, [1], 6, [5, -3], 3, [2], 7, [6, -3], 4, [3],
8, [7, -3]}
)}
)
)
)
Découvrez ce qui doit être modifié pour inclure les BoxPlots lorsque le générateur de graphiques d'origine ressemble à ceci.
Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:name), Y(:age), Y(:sex), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(1))),
Elements(Position(1, 2), Points(X, Y, Legend(2))),
Elements(Position(1, 3), Points(X, Y, Legend(3))),
Elements(Position(1, 4), Points(X, Y, Legend(4)))
)
Revenez à votre script et essayez de petites modifications. Vous pouvez assez facilement voir qu'il vous manque quelque chose dans Elements et en fonction de votre script d'origine.
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
il semble que vous devriez simplement essayer d'y ajouter le Box Plot au format correct
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?Exécutez le graphique.
Ouvrez le panneau de configuration
Ajoutez les boîtes à moustaches souhaitées.
Fermez le panneau de configuration
Allez dans le triangle rouge et sélectionnez
Enregistrer => Fenêtre Script vers Script
Examinez le code et modifiez le script pour ajouter les éléments supplémentaires que contient le nouveau script et que l'ancien script ne contient pas.
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?@txnelson J'ai fait exactement cela, j'ai ajouté des boîtes à moustaches de manière interactive, puis j'ai vérifié le script résultant, apporté les modifications à mon script d'origine, mais je n'ai toujours pas réussi à faire fonctionner les boîtes à moustaches.Je suppose que je ne suis toujours pas doué pour repérer ce qui manque/ce qui est nécessaire.
J'essaierai @jthi suggestion maintenant.
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?Exécutez votre JSL, puis modifiez le graphique selon l'apparence souhaitée, puis enregistrez le JSL à partir du nouveau graphique.Ajoutez le nouveau JSL à cette piste de discussion et j'y jetterai un œil.
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?@txnelson Ce qui suit est proche de mon cas réel.
Names default To Here (1);
Clear Log ();
dt = Open("$sample_data\Semiconductor Capability.jmp");
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(Variables(X(:lot_id)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr); qui donne

Cependant, j'aimerais quelque chose comme ce qui suit

Le script généré par JMP pour lequel est
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) ),
Elements(
Position( 1, 1 ),
Points( X, Y, Legend( 1 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 5 ), Jitter( "None" ) )
),
Elements(
Position( 1, 2 ),
Points( X, Y, Legend( 2 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 6 ), Jitter( "None" ) )
),
Elements(
Position( 1, 3 ),
Points( X, Y, Legend( 3 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 7 ), Jitter( "None" ) )
),
Elements(
Position( 1, 4 ),
Points( X, Y, Legend( 4 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 8 ), Jitter( "None" ) )
),
SendToReport(
Dispatch(
{},
"400",
LegendBox,
{Legend Position(
{1, [0], 5, [4, -3], 2, [1], 6, [5, -3], 3, [2], 7, [6, -3], 4, [3],
8, [7, -3]}
)}
)
)
);La question est de savoir comment modifier le script du haut de cet article pour inclure une boîte à moustaches en plus des points ?
Ajouter des Box Plots () juste en dessous de Points () ne me donne pas les deux.
Je suppose que mon emplacement pour Box Plots () est incorrect. Besoin d'aide ici.
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?Je pense que vous avez utilisé les valeurs aberrantes "Box Plot" par défaut.
Recherchez-vous une méthode quantile « Box Plot » qui relie tous les points ?

Graph Builder(
Size( 1135, 705 ),
Show Control Panel( 0 ),
Variables(
X( :“S-b"n ),
Y( :C),
Color( :“S-b"n )
),
Elements( Box Plot( X, Y, Legend( 4 ), Box Type( "Quantile" ) ) )
);
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?Des modifications très mineures ont été nécessaires pour produire le graphique souhaité.
Le JSL produit par le script initial qui exécute Graph Builder est
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
);
Quand on regarde le JSL qui a créé le code Graph Builder ci-dessus, seules 2 sections font le vrai travail.
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Crée le shell pour le Graph Builder
Graph Builder(
Show Control Panel( 0 ),
);
Le JSL
variables_expr = Expr(Variables(X(:lot_id)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
Génère le code
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) )
Alors,
Insert Into(gb_expr, Name Expr(variables_expr));
Insère les variables (X(.................) JSL dans le code Graph Builder()
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) )
);
Maintenant, ce qu'il faut faire, c'est construire
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
Le JSL qui crée ces lignes de code est
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Il parcourt chacune des valeurs Y et crée la ligne Elements une par une, et l'insère dans le JSL Graph Builder().
Enfin,
Eval(gb_expr);
Exécute le JSL Graph Builder terminé
Alors maintenant, qu’est-ce qui doit être changé.
Fondamentalement, si l'on regarde ce qui est différent entre le JSL créé par le script d'origine et le JSL enregistré à partir du Graph Builder avec les nouvelles modifications, dans la sortie du script d'origine, la structure des éléments est
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) )
Où la section Éléments du code enregistré comporte une section pour les points et le tracé en boîte.
Elements(
Position( 1, 1 ),
Points( X, Y, Legend( 1 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 5 ), Jitter( "None" ) )
)
Il suffit donc d’ajouter cette deuxième section au code qui génère la section Elements.
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
Si vous mettez tout cela ensemble, le nouveau script est
Names Default To Here( 1 );
Clear Log();
dt = Open( "$sample_data\Semiconductor Capability.jmp" );
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(
Variables( X( :lot_id ) )
);
For Each( {y_col}, y_values,
temp_expr = Expr( Y() );
Insert Into( temp_expr, Name Expr( As Column( dt, y_col ) ) );
Insert Into( variables_expr, Name Expr( temp_expr ) );
);
gb_expr = Expr(
Graph Builder( Show Control Panel( 0 ) )
);
Insert Into( gb_expr, Name Expr( variables_expr ) );
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
Show( Name Expr( gb_expr ) );
Eval( gb_expr );Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?@txnelson Merci.
Je n'y serais pas parvenu facilement.
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
Comment puis-je modifier les marqueurs par défaut dans Points pour dire un "+" ou un "carré". Cela ne fait pas l'affaire
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ), marker ("square") )Changer le marqueur montre de manière interactive que je dois diriger le changement de marqueur via sendToReport () pour chaque variable Y. Comment faire cela en même temps pour toutes les variables Y ?
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?Selon l'endroit où vous le faites, où voir ce qui sera différent. Voici un exemple si vous le faites depuis Legend :
Changez-le de la légende et vous obtenez quelque chose comme
{Legend Model(4, Properties(0, {Marker("Circle")}, Item ID("NPN4", 1)))}
Recherchez donc le modèle de légende dans l'index des scripts.

Récupérez le script à partir de là, modifiez-le pour l'adapter à vos besoins mais gardez-le aussi simple que possible (ajoutez un deuxième axe Y) et testez-le
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:sex), Y(:height), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(3))),
Elements(Position(1, 2), Points(X, Y, Legend(1)))
);
server = gb << Get Legend Server;
item = server << Get Legend Item(1, 1);
item << Set Properties({Marker("Circle")});
Vous avez réussi à changer de marqueur sur une parcelle. Ensuite vous demandez : comment puis-je les modifier sur toutes les parcelles ? Explorez ensuite le script plus en détail et il semble que certains indices soient fournis
item = server << Get Legend Item(1, 1);
cochez << Récupérez l'élément de légende à partir de l'index de script et espérez qu'il est là et s'il ne l'est pas, explorez d'autres objets liés à la légende et espérez qu'ils fonctionnent de la même manière (ou essayez simplement d'envoyer des messages au serveur << obtenez lege Ctrl+Espace ici).
server << Get Legend Items;
{{LegendModelItem(Label("height"), Type("Marker"))},
{LegendModelItem(Label("weight"), Type("Marker"))}}
Vous avez maintenant une liste d’éléments de légende. Essayez de parcourir cette liste et voyez ce qui se passe
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:sex), Y(:height), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(3))),
Elements(Position(1, 2), Points(X, Y, Legend(1)))
);
server = gb << Get Legend Server;
For Each({item}, server << Get Legend Items,
item << Set Properties({Marker("Circle")});
);
Une option plus simple consiste à définir les marqueurs comme états de ligne dans votre table de données si cela fonctionne pour vous.
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?@jthi Merci. Existe-t-il un moyen de modifier les marqueurs lorsque les points sont tracés en premier plutôt que d'accéder ultérieurement au serveur de légendes, puis de modifier les marqueurs pour chaque variable Y ?
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?Y a-t-il une raison pour laquelle ils n'ont pas pu être modifiés par la suite ?
Vous pouvez utiliser SendToReport et créer le modèle Legend dans la partie Dispatch avec des idées similaires à celles que d'autres parties de votre script ont été créées.
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?@jthi Bien sûr, les choses pourraient être changées après. Changer de marqueur pendant le traçage des points m'a semblé un itinéraire plus simple.
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?@jthi @txnelson Dans le script principal ci-dessous, j'ai ajouté Local Data Filter() sous Eval() qui fonctionne comme prévu
Eval( gb_expr <<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>
mais si j'ajoute le script de mise à jour des marqueurs, le graphique est tracé deux fois !
Eval(
server = gb_expr << Get Legend Server;
For Each( {item}, server << Get Legend Items, item << Set Properties( {Marker( "Circle" )} ) );
);<BR />
Names Default To Here( 1 );
Clear Log();
dt = Open( "$sample_data\Semiconductor Capability.jmp" );
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(
Variables( X( :lot_id ) )
);
For Each( {y_col}, y_values,
temp_expr = Expr( Y() );
Insert Into( temp_expr, Name Expr( As Column( dt, y_col ) ) );
Insert Into( variables_expr, Name Expr( temp_expr ) );
);
gb_expr = Expr(
Graph Builder( Show Control Panel( 0 ) )
);
Insert Into( gb_expr, Name Expr( variables_expr ) );
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
//Show( Name Expr( gb_expr ) );
Eval( gb_expr <<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>Le deuxième graphique contient les marqueurs mis à jour.
Comment tracer un seul graphique avec les marqueurs mis à jour avec le filtre de données local ?
Je suppose que je ne parviens pas à placer correctement la dernière pièce pour le changement de marqueur là où je demande de l'aide.
Re : Comment ajouter des boîtes à moustaches aux points lorsque des variables Y sont fournies sous forme de liste au générateur de graphiques ?Vous ne voulez pas exécuter gb_expr deux fois. Vous souhaitez obtenir la référence que vous obtenez de gb_expr et lui envoyer ces messages
gb = Eval( gb_expr );
gb << Local data Filter(...)
server = gb << get legend server;