Dans Graph Builder, je souhaite afficher une étiquette de données (et non une étiquette de survol) pour les lignes sélectionnées uniquement. En guise de démo, j'ai essayé le code suivant :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Try(
Show( dt:Selected Name ),
dt << New Column( "Selected Name",
Character,
Set Formula( If( Selected( Row State( Row() ) ) == 1, :name ) )
)
);
dt:Name << Label( 0 );
dt << Clear Row States << Select All Rows << Label << Clear Select;
dt:Selected Name << Label( 1 );
// The following doesn't work as expected
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{Marker Size( 5 ), Marker Drawing Mode( "Normal" )}
)
)
);
nw1 = New Window( "DTB", dtb1 = Data Table Box( dt ) );
dtb1 << set selectable rows();Lorsque je sélectionne une ligne dans le tableau de données, ou dans la zone de tableau, ou en sélectionnant le point de données dans le générateur de graphiques, l'étiquette doit apparaître dans : Nom sélectionné. Cependant, il semble toujours avoir un point sélectionné en retard ! Par exemple, je sélectionne KATIE et le point de données est mis en surbrillance mais il n'y a pas d'étiquette. Ensuite, si je sélectionne LOUISE, le point de données de cette ligne est mis en surbrillance, mais le point de données de KATIE est maintenant étiqueté !

Mais si je clique à nouveau sur LOUISE, le message devient correctement étiqueté :

Enfin, si je désélectionne toutes les lignes, la dernière étiquette reste visible.
Fait intéressant, si j'utilise le code suivant pour placer la zone de tableau et le générateur de graphiques dans la même fenêtre, et que je sélectionne des lignes dans la zone de tableau ou dans le tracé du générateur de graphiques, cela fonctionne comme prévu, l'étiquette ne s'affichant que pour les lignes sélectionnées :
dt << clear select;
nw2 = New Window( "Demo",
H List Box(
dtb2 = Data Table Box( dt ),
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{Marker Size( 5 ), Marker Drawing Mode( "Normal" )}
)
)
)
)
);
dtb2 << set selectable rows();Existe-t-il une meilleure façon de faire ce que j'essaie ?
Je vois ce comportement sur JMP 17.2 et JMP 18.
@jthi a écrit :
Cela ne fonctionne pas avec le code que j'ai fourni ou lorsque vous utilisez une idée similaire sur vos données (pour moi, cela fonctionne avec JMP17.2/JMP18.0 sur Windows 10) ?
Votre simple fonction utilisant des formules << run ne fonctionne pas pour moi dans JMP 17.2/18.0 sur Mac OS 13.6.7.
Cela ne fonctionne pas avec le code que j'ai fourni ou lorsque vous utilisez une idée similaire sur vos données (pour moi, cela fonctionne avec JMP17.2/JMP18.0 sur Windows 10) ?
Merci pour la suggestion! Malheureusement, cela n'a pas fonctionné pour moi tel quel, mais ce qui suit fonctionne :
f = Function({a},
rr = dt << get selected rows;
dt << clear select;
wait(0);
dt << select rows( rr );
rs = dt << Make Row State Handler(f);
);
rs = dt << Make Row State Handler(f);Cependant, cela ressemble à une horrible solution de contournement. L'instruction Make Row State Handler à l'intérieur de la fonction semble être nécessaire car après le premier appel de f(), le gestionnaire est oublié (je ne suis pas sûr de comprendre ce qui se passe ici !).
Je pense que vous devrez peut-être utiliser quelque chose pour provoquer un petit retard. Une option est le gestionnaire d'état de ligne (ceux-ci peuvent être très peu fiables) + exécuter des formules
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Try(
Show(dt:Selected Name),
dt << New Column("Selected Name",
Character,
Set Formula(If(Selected(Row State(Row())) == 1, :name))
)
);
dt:Name << Label(0);
dt << Clear Row States << Select All Rows << Label << Clear Select;
dt:Selected Name << Label(1);
// The following doesn't work as expected
gb1 = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y, Legend(3))),
SendToReport(
Dispatch({}, "Graph Builder", FrameBox, {Marker Size(5), Marker Drawing Mode("Normal")})
)
);
nw1 = New Window("DTB", dtb1 = Data Table Box(dt));
dtb1 << set selectable rows();
f = Function({a},
dt << run formulas;
);
rs = dtb1 << Make RowState Handler(f);