Légende de force avec marqueur et couleur de l'état de la ligneBonjour,
J'essaie de faire une légende avec des marqueurs et des couleurs, mais j'aimerais les choisir. Je pensais que ce serait facile grâce à l'état des lignes (état de la couleur, état du marqueur, états combinés). Mais une fois la couleur et le marqueur attribués à chaque ligne, je n'arrive pas à trouver un moyen de les forcer dans la légende.
J'aimerais le faire par script (je pensais ajouter une case avec la légende), mais je n'arrive pas à trouver un moyen de gérer les "marqueurs" que j'ai créés.
Merci
Re : Légende de force avec marqueur et couleur de l'état de la ligneMerci Ian,
c'est plus proche de mon idée initiale et c'est facile à intégrer dans mon script.
Je préfère donc légèrement cette solution, même si l'autre fonctionne bien.
Re : Légende de force avec marqueur et couleur de l'état de la ligneJe n'ai pas compris comment le faire avec un script mais si vous allez dans Lignes> Couleur ou Marquer par colonne
vous obtenez ce qui suit

Vous pouvez maintenant cliquer avec le bouton droit sur la légende et la modifier comme vous le souhaitez, et si vous avez sélectionné "Créer une fenêtre avec une légende", cela créera une légende pour vous. Cela présente l'avantage supplémentaire de sélectionner dans le tableau tout ce que vous avez sélectionné dans la légende.
Vous pouvez faire la même chose dans les scripts avec :
Names Default to here(1);
dt = Open("$SAMPLE_DATA\Big CLass.jmp");
legend = dt << Marker By Column(:age);
new window("Not Really",
Hlistbox(
bivariate(Y(:height), X(:weight)),
legend
)
)
Mais vous perdez (du moins, je n'ai pas trouvé de moyen de le faire) la personnalisation que vous recherchez
Re : Légende de force avec marqueur et couleur de l'état de la ligneComme alternative, vous pourriez envisager d'utiliser « MarkerSeg ». Dans le code ci-dessous, « dt » se trouve un tableau de tous les niveaux distincts de la colonne que vous souhaitez colorer et marquer. Vous pouvez utiliser « Tableaux > Résumé » et rendre cela invisible.
NamesDefaultToHere(1);
// Example data table (markers and colors assigned by 'Lot ID')
dt = New Table( "Rows With Colors and Markers",
Add Rows( 12 ),
New Column( "Lot ID",
Character,
"Nominal",
Set Values(
{"lot1", "lot10", "lot11", "lot12", "lot13", "lot2", "lot3", "lot4",
"lot5", "lot6", "lot7", "lot8"}
),
Lock( 1 )
),
Set Row States(
[896.813481688499, 1104.17848521471, 34064.2516910434, 1584.79095828533,
1856.1745531559, 34848.5869575739, 35120.7292968035, 2704.17450988293,
2976.75480300188, 3200.51829791069, 3408.21706777811, 36368.77437675]
)
);
// Make legend window with MarkerSeg
n = NRow(dt);
xx = J(n, 1, 1);
yy = Transpose(1::n);
legendList = Column(dt, "Lot ID") << getValues;
gb = Graph Box(
FrameSize( 150, 300*(n/16) ),
Y Scale( 0, n+1 ),
X Scale( 0, 6 ),
Y Name(" "),
X Name(" "),
Y Axis(ShowLabels(0), ShowMajorTicks(0), ShowMinorTicks(0)),
X Axis(ShowLabels(0), ShowMajorTicks(0), ShowMinorTicks(0)),
Marker Seg( xx, yy, Row States( dt ) ),
For( i = 1, i<=n, i++, Text( {1.5, i-0.1}, legendList[i] ) )
);
db = PanelBox("Row State Colours and Markers for 'Lot ID'", gb);
New Window( "My Legend", db);
Re : Légende de force avec marqueur et couleur de l'état de la ligneCela semble être une bonne solution. Il me faut maintenant l'adapter à mon cas. Merci beaucoup!
Juste déçu par l'état des rangées !
Re : Légende de force avec marqueur et couleur de l'état de la ligneSi tu regardes
Aide==>Index des scripts
et regardez à la fois les éléments Graph Builder et Legend Box(), la manipulation de la légende après l'exécution de Graph Builder est limitée. Cependant, vous pouvez utiliser une technique qui fonctionne pour tout, mais qui est un peu lourde. Si vous générez une chaîne littérale contenant le code dont vous avez besoin pour que Graph Builder fasse ce que vous voulez, vous pouvez ensuite exécuter cette chaîne littérale. Voici un exemple très primitif, mais je pense que vous verrez quel genre de choses vous pouvez faire avec
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Summarize( dt, groups = by( dt:sex ) );
numofgroups = N Items( groups );
TheCode =
"Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
\!"400\!",
ScaleBox,
{Legend Model(
1,";
For( i = 0, i <= numofgroups - 1, i++,
Show( i );
TheCode = TheCode || "Properties(" || Char( i ) || ", {Line Color (" || Char( i + 3 ) || "),Marker( " || Char( 16 - i ) || ")}),";
);
TheCode = TheCode || "Dispatch( {}, \!"400\!", LegendBox, {Legend Position( {1, [2, 3], 1, [0, 1]} ), Position( {2, 3, 0, 1} )} ))';";
Eval( Parse( TheCode ) );Re : Légende de force avec marqueur et couleur de l'état de la ligneMerci Jim
1. Je suis d'accord que ce n'est pas un vrai problème... Je peux obtenir la liste avec un peu de travail !
2. Peut-être que je n'ai pas été assez clair. Je peux facilement, comme vous le mentionnez, obtenir le numéro (N) de l'élément à modifier dans la légende. Cela signifie que je devrai créer N lignes dans le script créant le graphbuilder (je dois envoyer N lignes avec "legend box(properties(0...N)"). Mais si je construis un graphique avec N+1 lignes dans la zone de légende cela fonctionnera en partie (la N+1ème ligne ne sera pas modifiée). Ainsi, je dois faire une boucle soit dans le script créant le graphbuilder (est-ce faisable ?) soit après le script créant le graphbuilder (cela a plus de sens, mais je ne parviens pas à trouver le(s) message(s) que je peux envoyer à legendbox) .
Re : Légende de force avec marqueur et couleur de l'état de la ligne1. Les marqueurs sont numérotés comme le montre le tableau ci-dessous. Ceci a été généré par un script, comme démontré dans le guide de script.
Aide==>Livres==>Guide de script

Certains marqueurs ont des noms qui leur sont attribués, que vous avez vus dans le script Graph Builder. Je ne connais aucune liste de ces noms, mais vous pouvez toujours exécuter de manière interactive un générateur de graphiques et attribuer le marqueur souhaité, puis afficher le script qu'il a produit et voir s'il vous donne un nom et pas seulement un numéro.
2. La légende sera répertoriée par ordre alphabétique ou numérique, à moins que l'ordre des valeurs ou le niveau d'ordre des lignes ne soient activés. Par programme, vous pouvez déterminer cela, puis ajuster votre code. En ce qui concerne la recherche des âges dans le tableau de données, la fonction Summarize() est ce que j'utilise la plupart du temps.
résumer(dt,bygroup = By(:Age));
La variable "bygroup" aura une liste de tous les différents âges trouvés.
N articles (par groupe);
Vous donne le nombre d'âges différents trouvés
Re : Légende de force avec marqueur et couleur de l'état de la ligneMerci pour la réponse rapide,
1/ Cela peut fonctionner à condition d'avoir un ensemble complet de noms de marqueurs (j'ai trouvé dans la documentation les couleurs standards JMP). Savez-vous où je peux trouver quelque chose d'équivalent pour les noms de marqueurs ?
2/ Dans ce cas si les couleurs et les marqueurs sont écrits dans un tableau dédié je peux modifier chaque ligne de la légende via un (eval(substitute(expr(graphbuilder(color1,marker1),expr(color1),mycolor, expr( marqueur1),mon marqueur))). Cela fonctionne, bon pas en avant, mais j'ai besoin de connaître le numéro d'élément dans la légende pour pouvoir effectuer la substitution.
Pour que ce soit plus clair pour le fichier "grande classe", si la superposition est faite avec :AGE, et si je ne connais pas le(s) AGE(s) dans le fichier, comment faire ?
Je pourrais peut-être le faire en boucle (après le générateur de graphiques), si je pouvais envoyer un message à la legendbox. Mais je ne trouve pas dans la documentation des messages qui modifient l'élément...Et finalement le nœud de l'arborescence est "vide" dans le nœud legendbox.
Re : Légende de force avec marqueur et couleur de l'état de la ligneLe moyen le plus simple que j'ai trouvé pour que JMP gère cela est de modifier la légende, et donc le graphique à l'aide de JSL, pour qu'il corresponde à vos états de ligne. Voici un script qui montre comment modifier la légende dans Graph Builder.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
1,
Properties( 0, {Marker( "FilledTall" )} ),
Properties( 1, {Line Color( 1 ), Line Style( "Dashed" ), Marker( "Filled Diamond" )} )
), Legend Model(
1,
Properties( 0, {Marker( "FilledTall" )} ),
Properties( 1, {Line Color( 1 ), Line Style( "Dashed" ), Marker( "Filled Diamond" )} )
)}
),
Dispatch( {}, "400", LegendBox, {Legend Position( {1, [2, 3], 1, [0, 1]} ), Position( {2, 3, 0, 1} )} )
)
);
Il produit ce qui suit
