Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB?Salut tout le monde,
Je me demande si quelqu'un pourrait disposer d'un code JSL ou d'un complément pour pouvoir prendre un tracé de générateur de graphiques (GB) et le squarifier (définir les axes x et y de la même manière) et ajouter une ligne à 45 degrés, comme le font souvent les graphiques Actual by Predicted, voir l'exemple ci-dessous.

Autant que je sache, GB n'a aucune sorte d'option pour le faire automatiquement pour vous, ce qui est dommage, car j'aime souvent faire des graphiques comme les graphiques Actual by Predicted et j'ai la polyvalence supplémentaire de la plate-forme GB pour ajouter de la couleur ou d'autres types de formatage du graphique.
Peut-être que cela pourrait être sur la liste de souhaits pour une nouvelle fonctionnalité en GB ?
Merci!,
DS
GraphiqueRe : Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB ?Salut @txnelson ,
Merci pour la réponse rapide et l'indice. À partir de là, j'ai également trouvé une solution précédente que vous avez fournie à un autre utilisateur cherchant à faire quelque chose de similaire avec les fenêtres et les rapports. ici .
L'ajout de cette simple ligne de code me permet de passer à l'édition et à la modification du rapport actuel du générateur de graphiques.
gb=Current Report()[outlinebox(1)]<<GET scriptable="" object=""></GET>
Merci pour l'aide!,
DS
Re : Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB ?Consultez l'Index des scripts pour la documentation sur le
Rapport actuel()
fonction
Re : Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB ?Salut @txnelson , @Craige_Hales , et @David_Burnham ,
Merci encore pour votre aide précédente. J'espère que vous pourrez m'aider sur un autre aspect de ce projet parallèle.
Comme mentionné dans ma dernière réponse, je voudrais implémenter cela d'une manière qui serait un élément de bouton de raccourci de barre d'outils que les utilisateurs de mon organisation peuvent "installer" dans leur JMP, comme des compléments. Cette partie, je sais comment faire. Ce sur quoi je suis coincé, c'est comment traiter une fenêtre ouverte existante comme un rapport afin que vous puissiez la manipuler comme dans le code ci-dessus sur ce post.
Par exemple, un utilisateur ouvre le fichier Big Class.jmp, puis démarre manuellement à l'aide de Graph Builder pour tracer la taille par rapport au poids. Cela ouvre une fenêtre enfant sous la table de données Big Class appelée Big Class - Graph Builder. Je sais comment obtenir les noms de fenêtres et tout ça, mais contrairement au code précédent, je n'ai pas ce qui suit
gb = dt << Graph Builder( Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 4 ) ) )
);Je ne peux donc pas référencer gb en utilisant Report (gb), où il est utilisé pour les manipulations suivantes dans l'exemple de code de Craige :
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(Y Function(x,x), Pen Color("blue"));
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "red" );
Pen Size( 3 );
Line Style( "dotted" );
Line( {xmin, ymin}, {xmax, ymax} );// the diagonal
);Dans ce type de codage, il est facile de référencer le rapport gb car vous avez envoyé la commande à la table de données en faisant gb = dt << Graph Builder (.....). Dans mon cas, je n'aurais pas cela parce que l'utilisateur le fait manuellement (avec le graphique qu'il crée).
J'aimerais créer un bouton de raccourci de barre d'outils que l'on pourrait appuyer, le code obtient alors le nom de la fenêtre actuelle du générateur de graphiques (au cas où il y aurait plus d'une instance de Graph Builder ouverte pour cette table de données), puis effectue la squarify et la diagonale ligne comme résolu d'avant. Je ne sais pas comment passer du nom d'une fenêtre à son affectation en tant que rapport afin que tout le reste du code puisse fonctionner.
Merci d'avance!,
DS
Re : Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB ?Salut @txnelson , @Craige_Hales , @David_Burnham , et @Mark_Bailey ,
Merci pour vos commentaires et votre contribution à ce sujet, je l'apprécie vraiment. J'aime les deux versions pour différentes raisons, j'aime les façons supplémentaires de modifier le style de ligne avec les méthodes de Jim et Craige, mais j'aime aussi le style de fonction simplifié de David et Mark. Je pouvais voir les deux méthodes avoir de la valeur pour des raisons et des publics différents.
Je vais prendre vos suggestions et comprendre comment rédiger le JSL afin qu'il puisse être ajouté en tant que bouton de raccourci de la barre d'outils afin que je puisse le distribuer à d'autres membres de mon organisation.
Merci!,
DS
Re : Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB ?Ajouter à @David_Burnham , beaucoup de gens ne réalisent pas qu'il n'est pas nécessaire d'exécuter un script pour ajouter un script graphique à un tracé (frame box). Tu peux accomplir de manière interactive la même chose. Cliquez avec le bouton droit dans la zone de tracé et sélectionnez Personnaliser. Cliquez sur le bouton d'ajout (+) puis entrez l'expression Y Function( x, x ). Il existe même une macro pour cette expression courante. Cette façon n'est peut-être pas la meilleure pour vous maintenant, mais je voulais que vous la connaissiez comme une alternative.
Re : Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB ?Une autre façon d'ajouter la ligne diagonale consiste à ajouter la ligne de fonction y=x :
report(gb)[FrameBox(1)] << add graphics script(
Y Function( x, x )
)
Re : Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB ?Voici une variante qui suppose que vous ne redimensionnerez pas le graphique ou n'ajusterez pas les axes après son tracé. La version de Jim réinitialise l'équerrage à chaque redessin du graphique, ce qui peut déclencher un autre redessin du graphique. Si vous en avez vraiment besoin, il peut être nécessaire d'utiliser le planificateur pour réinitialiser l'équerrage en dehors du script graphique.
dt = Open( "$sample_data/big class.jmp" );
gb = dt << Graph Builder( Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
Report( gb )[framebox( 1 )] << FrameSize( 500, 500 ); //force square
// fix JSL here to set the axis ranges the way you expect.
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
// add the diagonal line
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "red" );
Pen Size( 3 );
Line Style( "dotted" );
Line( {xmin, ymin}, {xmax, ymax} );// the diagonal
);
Corner-to-corner diagonal added by script.Diagonale d'un coin à l'autre ajoutée par le script.
Vous ne voulez probablement pas vraiment de rouge, 3, pointillé !
Re : Quelqu'un a-t-il un complément ou un code JSL pour ajouter une ligne à 45 degrés et squarifier un tracé GB ?Voici un script simple qui maintient un affichage carré avec une ligne diagonale.Le code est écrit pour montrer, espérons-le, tout ce qui se passe.Un code beaucoup plus efficace pourrait être écrit.
Names Default To Here( 1 );
dt = Current Data Table();
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 8 ) ) )
);
rpt = Current Report();
xmax = rpt[axisbox( 1 )] << get max;
ymax = rpt[axisbox( 2 )] << get max;
xmin = rpt[axisbox( 1 )] << get min;
ymin = rpt[axisbox( 2 )] << get min;
rpt[axisbox( 1 )] << Min( Min( ymin, xmin ) );
rpt[axisbox( 1 )] << Max( Max( ymax, xmax ) );
rpt[axisbox( 2 )] << Min( Min( ymin, xmin ) );
rpt[axisbox( 2 )] << Max( Max( ymax, xmax ) );
rpt[framebox( 1 )] << add graphics script(
xmax = rpt[axisbox( 1 )] << get max;
ymax = rpt[axisbox( 2 )] << get max;
xmin = rpt[axisbox( 1 )] << get min;
ymin = rpt[axisbox( 2 )] << get min;
rpt[axisbox( 1 )] << Min( Min( ymin, xmin ) );
rpt[axisbox( 1 )] << Max( Max( ymax, xmax ) );
rpt[axisbox( 2 )] << Min( Min( ymin, xmin ) );
rpt[axisbox( 2 )] << Max( Max( ymax, xmax ) );
theMinLineList = {};
theMaxLineList = {};
Insert Into( theMinLineList, Min( ymin, xmin ) );
Insert Into( theMinLineList, Min( ymin, xmin ) );
Insert Into( theMaxLineList, Max( ymax, xmax ) );
Insert Into( theMaxLineList, Max( ymax, xmax ) );
Line( theMinLineList, theMaxLineList );
xx = rpt[framebox( 1 )] << get size;
Show( xx );
xx[1] = Max( xx );
xx[2] = Max( xx );
rpt[framebox( 1 )] << framesize( xx[1], xx[2] );
);