Graph Builder, comment changer la couleur d'un élément et des informations sur la syntaxe SendToReportBonjour,
Je crée un graphique avec un contenu dynamique (le nombre de variables est déterminé au moment de l'exécution).
Je voudrais changer pour changer plusieurs choses après avoir configuré le générateur de graphiques, par exemple attribuer une nouvelle couleur. La raison pour laquelle je le fais après est que je ne connais pas les modifications avant d'exécuter d'autres parties de mon script que je ne peux pas exécuter plus tôt.
J'ai simplifié mon problème de base à cet exemple:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
// do some other stuff incl. addition or removal of variables to gb
// how do I *MODIFY* the color of Points, Smoother here or add a Line Plot?
Je connais la position des variables dans le graphique si cela aide (1,1 dans l'exemple ci-dessus).
Acclamations,
Alexandre
Re : comment changer la couleur d'une ligneSalut Alex,
Désolé pour la réponse tardive.
Supposons que le message Legend Model suivant soit envoyé.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
- Le premier argument (2) est un identifiant unique faisant référence à un modèle de légende spécifique dans la ScaleBox. Dans l'exemple ci-dessus, une valeur de 1 fait référence au modèle de légende contenant les points, tandis qu'une valeur de 2 pointe vers les lignes plus lisses.
- Le deuxième argument (Properties( 1, {Line Color( 4 )} )) contient des informations sur l'élément du modèle de légende auquel appliquer un ensemble donné de propriétés.
- Le premier argument dans Propriétés (1) est un numéro d'élément de base zéro pour identifier l'élément auquel appliquer la nouvelle propriété.
- Le deuxième argument dans Propriétés ({Line Color( 4 )}) est une liste de propriétés à appliquer à un élément de modèle de légende donné. Dans ce cas, nous changeons la couleur de la ligne en vert.
Voici quelques exemples:
Le script suivant définit le premier élément du premier modèle de légende (points) sur vert. Dans ce cas, le premier élément est "F".
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 1, Properties( 0, {Line Color( 4 )} ) )}
)
)
);
(À partir de maintenant, je donnerai simplement la partie du modèle de légende à remplacer dans le script ci-dessus)
L'extrait de modèle de légende suivant changera la couleur du deuxième élément (« M ») dans le modèle de légende des points.
Legend Model( 1, Properties( 1, {Line Color( 4 )} ) )
L'extrait de modèle de légende suivant changera la couleur du premier élément ("F") dans le modèle de légende de ligne plus lisse.
Legend Model( 2, Properties( 0, {Line Color( 4 )} ) )
L'extrait de modèle de légende suivant changera la couleur du deuxième élément (« M ») dans le modèle de légende de ligne plus lisse.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
REMARQUE : la modification de la couleur de la ligne plus lisse modifie également la couleur des points correspondants, mais la modification de la couleur des points des points n'affecte pas la couleur de la ligne plus lisse associée.
Re : comment changer la couleur d'une ligneMerci pour votre retour.
Pourriez-vous également expliquer la syntaxe du modèle de légende ?
Re : comment changer la couleur d'une ligneLa syntaxe de l'argument SendToReport est la suivante (à partir de l'index de script) :
SendToReport( Dispatch( "Outline name", "Element name", Element type, command );
Le deuxième argument de la commande dispatch ("Element Name") est utilisé comme identifiant pour trouver le DisplayBox correct. Par exemple, cet argument correspondrait à l'attribut "helpKey" lors de l'utilisation d'une commande Dispatch pour un FrameBox. L'argument de type d'élément indique à JMP le type d'attribut à rechercher (car il est différent pour différentes DisplayBox).
Pour un ScaleBox (comme nécessaire dans ce cas), l'argument du nom de l'élément fait référence à l'attribut "charID". Graph Builder crée plusieurs ScaleBoxes à diverses fins, mais le charID de "400" est attribué à la ScaleBox qui est nécessaire pour envoyer des messages tels que Legend Model.
Vous trouverez ci-dessous un extrait du XML d'un générateur de graphes (créé à l'aide des scripts plus bas) qui montre les cinq ScaleBox qui ont été créés. Vous remarquerez que l'une des boîtes d'échelle a un charID de "400", qui est la boîte d'échelle que nous devons utiliser pour le message Modèle de légende.
<..truncated..>
<..truncated..>
<..truncated..>
Une autre façon d'utiliser le message Legend Model consiste à l'envoyer directement à cette ScaleBox. Une façon de référencer cette ScaleBox consiste à utiliser XPath comme indiqué ci-dessous. Cette méthode référence le ScaleBox qui a le charID de « 400 ».
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
scalebox = gb << xpath("//ScaleBox[@charID=\!"400\!"]");
scalebox << Legend Model( 2, Properties( 1, {Line Color( 4 )} ) );
Le script ci-dessous fait la même chose, mais utilise à la place la méthode SendToReport.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )}
)
)
);
Merci,
Re : comment changer la couleur d'une ligneIl s'agit d'une excellente demande pour le développement JMP, à savoir documenter le fonctionnement interne du générateur de graphes.
Re : comment changer la couleur d'une ligneJe fais la même chose mais maintenant que je vois le code généré, je dois pouvoir le comprendre.
Je n'ai pas trouvé de documentation pour Legend Model ni pour "400".
C'est pourquoi je demandais de l'aide et j'apprécierais beaucoup les commentaires.
Re : comment changer la couleur d'une ligneLa syntaxe "interne" du générateur de graphes n'est pas entièrement documentée. En ce qui concerne GB, je fais ce qui suit :
Créez un graphique qui ressemble exactement à ce que je veux, y compris le type de graphique, les symboles, les couleurs, les lignes, etc.
Cliquez sur le petit triangle rouge pour obtenir le code JSL
Intégrer le code JSL dans mon script
Fondamentalement, je laisse GB faire le gros du travail, puis j'utilise le code qu'il génère.
Re : comment changer la couleur d'une ligneBonjour Ian,
merci pour le bel exemple.
Pourriez-vous s'il vous plaît m'indiquer la partie du guide de script qui contient des informations sur la syntaxe du modèle de légende, la signification de la valeur "400" ?
J'ai recherché les mots "modèle de légende" - aucun résultat. 400 a eu plusieurs visites mais je n'ai pas pu identifier quelque chose de pertinent.
Merci pour votre aide!
Acclamations,
Alexandre
Re : comment changer la couleur d'une ligneFaites-le simplement de manière interactive, puis inspectez le code que JMP génère pour vous. Adaptation de votre exemple :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
// Add 'weight'
Wait(2);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable({Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )});
// Change the colour of the points and smoother for 'weight' to green
Wait(2);
gb << SendToReport( Dispatch({}, "400", ScaleBox, {Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )} ) );
Concernant la question la moins importante, vous pouvez regarder dans 'Help > Books > Scripting Guide' qui donne souvent quelques indications.
Re : comment changer la couleur d'une ligneJ'ai eu des questions similaires mais je n'ai jamais eu de réponses. Il semble que les experts JMP de ce forum évitent cette question ou n'encouragent pas les utilisateurs de JMP à en savoir plus.
Re : comment changer la couleur d'une lignevoici un meilleur exemple. comment changer la couleur des points et le lisser pour le poids dans celui-ci ?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable(
{Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )}
);
gb << SendToReport(
Dispatch( {}, "400", ScaleBox, {Legend Model( 1, Properties( 0, {Line Color( RGB color(31,119,180) ), Fill Color( 0 )} ) )} )
);
questions moins importantes :
Que signifie "400" dans ce contexte ?
Re: comment changer la couleur d'une ligneBonjour @Justin_Chilton , quels identifiants supplémentaires sont utilisés pour les noms d'éléments en plus de helpKey et charID ?
Lorsque je modifie l'étiquette d'un axe, le code JSL indique
gb << SendToReport( Dispatch( {}, "<STRONG>X Title</STRONG>", TextEditBox, {Set Text( "new" )} ))... mais le titre X n'apparaît pas dans le code XML de l'arborescence d'affichage. De quel identifiant s'agit-il ?
Parler aux boîtes d'affichage