Comment définir globalement les niveaux dans un graphique<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'utilise quelques scripts créés à partir de graphiques. Souvent, ces graphiques contiennent des données que JMP divise en niveaux, même si pour mes besoins, elles sont effectivement les mêmes. Par exemple, le code suivant concerne un graphique des taux d’exclusion moyens sur tous les sites.
Graphique (
X ( : Code d'identification ) ,
Oui ( Signifier ( : Taux d'exclusion )) ,
Ajouter des barres d'erreur à la moyenne ( Nom ( "Intervalle de confiance (regroupé)" )( 0,95 )) ,
Axe de superposition << {{ Format ( "Décembre fixe" , 12 , 3 ) , Min. ( 0,935 ) , Max. ( 0,9975 ) ,
Inc. ( 0,005 ) , Tiques mineures ( 1 )}} ,
Axe de pile de superposition << {{ Format ( "Décembre fixe" , 12 , 0 ) , Min. ( - 1,5 ) , Max. ( 8.5 ) , Inc. ( 1 ) ,
Tiques mineures ( 1 )}} ,
Niveau [ 1 ] << { Couleurs ( - 4221340 ) , Marqueurs ( 29 )} ,
Niveau [ 2 ] << { Couleurs ( - 4221340 ) , Marqueurs ( 29 )} ,
Niveau [ 3 ] << { Couleurs ( - 4221340 ) , Marqueurs ( 29 )} ,
Niveau [ 4 ] << { Couleurs ( - 4221340 ) , Marqueurs ( 29 )} ,
Niveau [ 5 ] << { Couleurs ( - 4221340 ) , Marqueurs ( 29 )} ,
Niveau [ 6 ] << { Couleurs ( - 4221340 ) , Marqueurs ( 29 )} ,
Niveau [ 7 ] << { Couleurs ( - 4221340 ) , Marqueurs ( 29 )} ,
Oui [ 1 ] << Graphique à points ( 1 ) ,
EnvoyerVersRapport (
Expédition ({} , "102" , Boîte à échelle , { Format ( "Pour cent" , 6 , 0 ) , Afficher la grille principale ( 1 )}) ,
Expédition ({} , "" , AxeBox ( 2 ) , { Ajouter une étiquette d'axe ( "Moyenne (taux d'exclusion)" )}) ,
Expédition ({} , "Moyenne (taux d'exclusion)" , TextEditBox , { Définir la taille de la police ( 20 )}) ,
Expédition (
{} ,
"Graphique graphique" ,
Boîte de cadre ,
{ Taille du cadre ( 704 , 536 ) , Taille du marqueur ( 6 )}
)
)
)
Lorsque le script a été créé pour le rapport précédent, il y avait sept sites, mais maintenant il y en a dix, donc les trois derniers tracés utilisent les paramètres par défaut. Existe-t-il un moyen de définir ces niveaux globalement plutôt qu'individuellement dans des moments comme celui-ci, lorsque le nombre de niveaux a changé ?
Re : Comment définir globalement les niveaux dans un graphiqueDonc, je suis maintenant dans un autre cycle de reporting et j'ai trouvé ce fil de l'année dernière. J'ai essayé pmroz La suggestion d'hier et cela a très bien fonctionné jusqu'à ce qu'il cesse de le faire. La première fois que j'ai utilisé la technique présentée par pmroz cela a parfaitement fonctionné. Pour chaque niveau de l’ensemble de données, la couleur et le type de marqueur corrects ont été appliqués à chaque point du graphique. Lorsque j'ai tenté d'utiliser la technique dans un autre script de table de données, cela n'a pas fonctionné ; le script s'est exécuté sans qu'aucune erreur ne soit générée, mais les couleurs et le marqueur par défaut pour JMP ont été utilisés à la place de ce que j'ai défini dans le script. Fait intéressant, le premier script que j'ai modifié utilise désormais également les valeurs par défaut de JMP au lieu de ce que je définis dans le script.
Voici le code :
Names Default To Here(1);
Delete Symbols();
dt = Current Data Table();
UniqueValueList = Function({inList},
{Default Local},
tmp = [=> 0];
Insert Into(tmp, inList);
tmp << Get Keys;
);
identCodes = :IDENT Code << Get Values;
uniqueCodes = UniqueValueList(identCodes);
nCrossings = NItems(uniqueCodes);
dt << Chart(
X(:IDENT Code),
Y(Mean(:Read Rate)),
Add Error Bars to Mean(Name("Confidence Interval (pooled)")(0.95)),
Overlay Axis << {{Format("Fixed Dec", 12, 2), Min(0.77), Max(1.05), Inc(0.02),
Minor Ticks(1)}},
Overlay Stack Axis << {{Min(-10)}},
For(i = 1, i <= nCrossings, i++,
Level[i] << {Colors(-4221340), Markers(29)}
),
Y[1] << Point Chart(1),
SendToReport(
Dispatch(
{},
"102",
ScaleBox,
{Format("Percent", 6, 0), Minor Ticks(1), Show Major Grid(1),
Show Minor Grid(0)}
),
Dispatch({}, "", AxisBox(2), {Add Axis Label("Mean(Read Rate)")}),
Dispatch({}, "Mean(Read Rate)", TextEditBox, {Set Font Size(20)}),
Dispatch(
{},
"Chart Graph",
FrameBox,
{Frame Size(1056, 464), Marker Size(6)}
)
)
)D'après ce que j'ai pu voir du débogueur JSL, nTraversées est correctement défini, mais il semble que la boucle For dans l'instruction Chart soit ignorée. Malheureusement, parcourir le code n'aide pas car Chart est une seule instruction, donc le débogueur ne parcourt pas son code.
Qu'est-ce que je fais mal?
Re : Comment définir globalement les niveaux dans un graphiqueOn dirait que c'est peut-être ce que je recherche. Je me demandais si je pouvais mettre une boucle For dans le code du graphique, mais je ne savais pas que je pouvais créer des fonctions définies par l'utilisateur en JSL ou que j'en aurais eu besoin dans ce cas. Je vais essayer votre solution.
Re : Comment définir globalement les niveaux dans un graphiqueVous pouvez mettre une boucle directement dans le code du graphique.
dt = Nouveau tableau ( "Exemple" , Ajouter des lignes ( 8 ) ,
Nouvelle colonne ( "Code d'identification" , Personnage , "Nominal" ,
Définir les valeurs ( { "AA" , "AA" , "AA" , "BB" , "BB" , "CC" , "CC" , "CC" } ) ) ,
Nouvelle colonne ( "Taux d'exclusion" , Numérique , "Continu" , Format ( "Meilleur" , 12 ) ,
Définir les valeurs ( [ 0,05 , 0,07 , 0,08 , 0,5 , 0,6 , 0,4 , 0,3 , 0,2 ] ) )
) ;
codes_identifiants = dt : Code d'identification << obtenir des valeurs ;
codes_uniques = get_unique_values ( codes_identifiants ) ;
codes n = articles ( codes_uniques ) ;
dt << Graphique (
X ( : Code d'identification ) ,
Oui ( Signifier ( : Taux d'exclusion )) ,
Ajouter des barres d'erreur à la moyenne ( Nom ( "Intervalle de confiance (regroupé)" )( 0,95 )) ,
Axe de superposition << {{ Format ( "Décembre fixe" , 12 , 3 ) , Min. ( 0,935 ) , Max. ( 0,9975 ) ,
Inc. ( 0,005 ) , Tiques mineures ( 1 )}} ,
Axe de pile de superposition << {{ Format ( "Décembre fixe" , 12 , 0 ) , Min. ( - 1,5 ) , Max. ( 8.5 ) , Inc. ( 1 ) ,
Tiques mineures ( 1 )}} ,
// Attribue à chaque niveau la même couleur et le même marqueur
pour ( je = 1 , je <= codes n , je ++,
niveau [ je ] << { Couleurs ( - 4221340 ) , Marqueurs ( 29 )} ,
) ,
Oui [ 1 ] << Graphique à points ( 1 ) ,
EnvoyerVersRapport (
Expédition ({} , "102" , Boîte à échelle , { Format ( "Pour cent" , 6 , 0 ) , Afficher la grille principale ( 1 )}) ,
Expédition ({} , "" , AxeBox ( 2 ) , { Ajouter une étiquette d'axe ( "Moyenne (taux d'exclusion)" )}) ,
Expédition ({} , "Moyenne (taux d'exclusion)" , TextEditBox , { Définir la taille de la police ( 20 )}) ,
Expédition (
{} ,
"Graphique graphique" ,
Boîte de cadre ,
{ Taille du cadre ( 704 , 536 ) , Taille du marqueur ( 6 )}
)
)
)
Voici le code de la fonction get_unique_values :
Get_unique_values = Fonction ( { dans la liste } ,
{ Local par défaut } ,
tmp = [ => 0 ] ;
Insérer dans ( tmp , dans la liste ) ;
tmp << obtenir les clés ;
) ;
Re : Comment définir globalement les niveaux dans un graphiqueMerci, mais ce n'est pas ce que j'entends par globalement. Je ne souhaite pas obliger JMP à créer tous les graphiques de la même manière. J'ai des scripts pour des ensembles de données spécifiques dans un projet en cours où le nombre de niveaux peut changer d'une période de rapport à l'autre. De la manière dont JMP génère le script, les paramètres des niveaux sont explicites. Je souhaite donc savoir s'il existe un moyen de définir les niveaux globalement. dans un graphique . J'ai un script similaire pour un ensemble de données avec 46 niveaux et le script a généré 46 lignes de paramètres de niveau bien que chaque niveau ait exactement les mêmes paramètres.
Il semble que JMP suppose que les niveaux sont toujours explicites et que l'utilisateur souhaite toujours qu'ils soient représentés différemment dans le graphique. Dans certains cas, cela est vrai, mais ce qui est considéré comme un niveau dans ce graphique, ce sont les catégories sur l'axe des X.
Re : Comment définir globalement les niveaux dans un graphiqueVous pouvez définir les valeurs par défaut dans les Préférences :
Fichier==>Préférences==>Graphiques
Le marqueur par défaut et le jeu de couleurs peuvent y être spécifiés

Si cela ne donne pas ce que vous souhaitez, votre script peut être facilement modifié pour tester le nombre de niveaux trouvés et générer le code selon les besoins.