Salut,
(REMARQUE sur le contexte : je travaille sur un modèle de graphique qui automatise la création de graphiques pour chaque étiquette (A, B, C, D et E) dans l'ensemble de données (voir le script ci-joint) puis de l'ajouter à la même fenêtre de sortie pour une exportation et un partage faciles. Ici, j'utilise un seul graphique pour l'étiquette "A" comme exemple pour prouver ce qui ne va pas avec mon script. )
J'ai eu un problème avec mon script JMP qui ne lisait pas la variable Group-by sélectionnée à partir de la sélection de l'utilisateur dans la fenêtre modale. Je souhaite que l'utilisateur sélectionne un nom de colonne "regrouper par" à partir des données qui pourraient être n'importe quelle variable de groupe et avoir une légende et un schéma de coloration comme dans l'exemple ci-dessous.

Dans le tableau de données JMP ci-joint, mes données de jouets ont la colonne générique "groupe". Mais, un utilisateur doit être en mesure de sélectionner n'importe quelle variable de caractère (telle que le site de fabrication, le lot, le processus, la formulation) dans le tableau et d'avoir la légende de groupe et le schéma de coloration.
Voici mon script JMP :
//select the data in the original data table
Names Default To Here( 1 );
dt = Current Data Table();
/*
2/28/2022 Edit
get column names to
1. get x-axis variable
2. get grouping variable for coloring the dots
- needs to be a none option for when there is no group
- logic statement later if set_groupby is "none", then no
-
Also, ask user what coloring scheme should be used.
JMP auto color (blue and red) or none (if manually coloring by, for example, batch ID)
see source: https://www.jmp.com/support/help/zh-cn/15.2/index.shtml#page/jmp/get-column-names.shtml
*/
column_names = dt << Get Column Names( Numeric, character, String );
//TO DO:
//names_for_groupby_select =
//group by should be a character variable only, so
<FONT color="#FF0000">groupby_col_names = dt << Get Column names(character, String);</FONT>
nw1 = New Window("Set X-axis and group by variable",
<<MODAL>groupby_col = Radio Box(groupby_col_names),
H List Box(
Button Box("OK",
answers = Eval List({set_xlabel = xaxisselect << get selected,
<FONT color="#FF0000">set_groupby = groupby_col << get selected</FONT>
});
nw1 << close window;
),
Button Box("Cancel")),
//change popup window size
<<SIZE window=""> 9, 5);
// generic chart (can be control chart or process chart)
Oneway(
SendToByGroup( {:Name("Label (y-axis)") == label_val},
Y( :Result ),
X( char(set_xlabel) ), //:Name("x axis") ),
Connect Means( 1 ),
Grand Mean( 0 ),
SendToReport(
Dispatch(
{},
"Result",
TextEditBox,
{Set Text( label_val || units_formatted )}
),
//font size:
Dispatch(
{},
"2",
ScaleBox,
{Label Row( Set Font Size( font_size ) )}
),
//graph stuff:
Dispatch(
{},
"Oneway Plot",
FrameBox,
{Frame Size( 1000, 300 ), DispatchSeg(
CustomStreamSeg( 6 ),
{Line Color( "Gray" )}
),
<FONT color="#FF0000">Row Legend(
//group by this
//:Name("Group"), //or just Group works too
char(set_groupby), // << need to be specified by user.
//set_groupby, // TO DO: fix this bug!</FONT>
Color( 1 ),
Color Theme( "JMP default" ), // TO DO: << needs to be specified by user.
Marker( 0 ),
Marker Theme( "" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
)
);
);
container << Append(content)
);</SIZE></MODAL>
Dans ce script JMP, la sélection de colonne sur l'axe des x fonctionne (voir l'exemple de fenêtre modale et le graphique résultant ci-dessous), j'ai donc supposé que la référence de variable groupée fonctionnera également également. Mais la sortie produit un graphique qui n'a pas de variable groupée ou de légende. Qu'est-ce que mon code ne fait pas correctement ici ?
Fenêtre modale :

Exemple de graphique de sortie JMP pour l'étiquette "A"

J'ai résolu le problème via ce post.
En utilisant Column(listDT,set_groupby) dans for char(set_groupby).
Row Legend(
//group by this
Column(listDT,set_groupby),
Color( 1 ),
Color Theme( "JMP default" ),
Marker( 0 ),
Marker Theme( "" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}Vous pouvez également utiliser Eval()
Row Legend(
//group by this
Eval(set_groupby),
Color( 1 ),
Color Theme( "JMP default" ),
Marker( 0 ),
Marker Theme( "" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}