Basculer la visibilité des principales lignes de grille dans Graph Builder via une toucheJ'aimerais configurer un complément pour basculer la visibilité des principales lignes de grille dans Graph Builder (à la fois X et Y), mais j'ai du mal avec la pièce JSL...J'ai l'objet GB et le SendToReport( .. Dispatch... code, mais il semble vouloir que le nom de la variable soit associé aux axes X et Y, et mon complément ne saura pas de quoi il s'agit.
Est-ce faisable ?
Voici ce que j'ai jusqu'à présent :
// steps to get last_gb scriptable object...<BR /><BR />// send setting change<BR />last_gb << SendToReport(
Dispatch(
{},
"myXaxis",
ScaleBox,
{ Label Row (Show Major Grid( not(Label Row (Show Major Grid ) ) ) ) ) }
),
Dispatch(
{},
"myXYaxis",
ScaleBox,
{ Label Row (Show Major Grid( not(Label Row (Show Major Grid ) ) ) ) ) }
)
)Exploration et visualisation des donnéesRe : Basculer la visibilité des principales lignes de la grille dans le générateur de graphiques via une toucheBonjour @BHarris ,
Que diriez-vous d'utiliser la boîte d'axe pour afficher la grille principale ?
Si vous souhaitez utiliser envoyer pour signaler un message, une idée consiste à utiliser obtenir un message variable pour obtenir une variable.
// #1 Example for Axis Box
gb_rpt = gb_ob << Report();
gb_rpt[axis box( 1 )] << Show Major Grid( 1 );
gb_rpt[axis box( 2 )] << Show Major Grid( 1 );
// #2 Example for send to report
var1 = gb_ob << Get Variable( 1 );
var2 = gb_ob << Get Variable( 2 );
Eval(
Substitute(
Expr(
gb_ob << send to report(
Dispatch(
{},
_var_,
ScaleBox,
{Label Row( Show Major Grid( 1 ) )}
)
)
),
Expr( _var_ ), Eval( Char( var1[1] ) )
)
);
J'espère que cela fonctionnera pour votre problème.
Re : Basculer la visibilité des principales lignes de la grille dans le générateur de graphiques via une toucheC'est très proche !J'aimerais que le script active et désactive l'état de la grille à chaque fois qu'il est exécuté, mais cela ne peut activer que les grilles.Je viens de passer environ une heure à essayer de comprendre comment lire l'état de la grille à partir d'un AxisBox, mais la documentation devient très clairsemée lorsque j'arrive à "Label Row" ...
Comment puis-je lire l'état actuel du réseau principal ?
Re : Basculer la visibilité des principales lignes de la grille dans le générateur de graphiques via une toucheIl pourrait y avoir de meilleures façons, mais une option que vous pourriez essayer est d'envoyer << get script à axisbox et d'obtenir la Show Major Grid à partir de là. Si cela n'est pas visible du tout, vous devriez pouvoir obtenir la valeur des propriétés des utilisateurs
axis_script = axisbox << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"];
Print("Grid");
, // not found
Arg(Arg(Get Preference(Major Grid Lines)));
Print("Preference");
);
Re : Basculer la visibilité des principales lignes de la grille dans le générateur de graphiques via une toucheBeaucoup plus près!Il désactive désormais le quadrillage pour la première case des axes x et y, mais pas pour toutes les cases des axes sur un tracé multiaxe :

Comment puis-je itérer sur toutes les boîtes d'axe?Voici ce que j'ai jusqu'à présent :
Names Default To Here( 1 );
win = Get Window List();
//Find graph builder windows
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
gb_rpt = gb << Report();
gb_axis1 = gb_rpt[AxisBox( 1 )];
gb_axis2 = gb_rpt[AxisBox( 2 )];
axis_script = gb_axis1 << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"], // not found
Arg( Arg( Get Preference( Major Grid Lines ) ) )
);
If( cur_gridValue,
gb_axis1 << Show Major Grid( 0 );
gb_axis2 << Show Major Grid( 0 );
,
gb_axis1 << Show Major Grid( 1 );
gb_axis2 << Show Major Grid( 1 );
);(ps.Je n'aurais jamais compris le truc "get script" ou "arg( arg(" par moi-même.J'ai l'impression d'être un scripteur semi-compétent de 25 ans d'expérience, mais je me sens toujours assez perdu dans JSL - très difficile de dire ce qu'il fait la plupart du temps.)
Re : Basculer la visibilité des principales lignes de la grille dans le générateur de graphiques via une toucheVous pouvez utiliser << XPath pour obtenir toutes les références AxisBox, puis les parcourir en boucle et les modifier une par une OU envoyer le même message à toutes. Cela peut nécessiter quelques vérifications supplémentaires pour ne pas modifier les cases d'axe que vous ne souhaitez pas modifier.
axisboxes = gb_rpt << XPath("//AxisBox");
<< Get XML peut être utile lorsque vous vérifiez s'il y a quelque chose de spécifique dans l'AxisBox qui pourrait vous aider à affiner les références (charID pourrait en être un). Vous pouvez ensuite modifier la requête XPath pour l'utiliser et la rendre plus précise.

Re : Basculer la visibilité des principales lignes de la grille dans le générateur de graphiques via une toucheCela l'a fait!Voici la solution pour tous ceux qui ont besoin d'un script pour activer/désactiver le quadrillage dans tous les tracés de Graph Builder :
Names Default To Here( 1 );
win = Get Window List();
//Find graph builder windows
graphs = Filter Each( {w}, win,
If( Length( w << XPath( "//OutlineBox[@helpKey='Graph Builder']" ) ) > 0,
1,
0
)
);
gb = graphs[N Items( graphs )][Outline Box( "Graph Builder" )] << Get Scriptable Object;
gb_rpt = gb << Report();
gb_axis1 = gb_rpt[AxisBox( 1 )];
axis_script = gb_axis1 << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"], // not found
Arg( Arg( Get Preference( Major Grid Lines ) ) )
);
axisboxes = gb_rpt << XPath( "//AxisBox" );
For Each( {anAxisBox,anIndex}, axisboxes,
If( cur_gridValue,
anAxisBox << Show Major Grid( 0 ),
anAxisBox << Show Major Grid( 1 )
)
);Merci à Jarmo et Yuichi pour leur aide !
****************************************
ps.Je ne comprends pas du tout l'astuce "<< Get XML" - j'ai essayé de le mettre à 4 endroits différents et je n'ai jamais sorti de XML avec "" dedans (bien que j'aie sorti beaucoup de XML .. .).Comment avez-vous appris à si bien scripter JSL ?
Re : Basculer la visibilité des principales lignes de la grille dans le générateur de graphiques via une toucheJ'ai appris à écrire des scripts juste en écrivant (la façon dont j'écris est que j'essaie beaucoup de choses différentes, lis la documentation (pour JSL généralement dans cet ordre: Scripting Index, Scripting Guide, JMP Community, JSL Syntax Reference) et essaie plus de choses et échouer beaucoup , mais au final j'arrive presque toujours à trouver une sorte de solution de travail).
Je pense que vous pouvez envoyer << get xml à la couche analytique ou de rapport de l'objet jmp. Parfois, vous pouvez même vous rapprocher de la référence correcte en inscrivant d'abord un indice, puis en utilisant << get xml, mais dans ce cas, je viens de l'envoyer à gb. Vous trouverez ci-dessous un autre exemple avec Big Class.jmp et après celui où j'ai placé dans votre script. Habituellement, j'efface le journal, lance << obtenir la ligne xml, clique sur le journal, puis utilise ctrl + f pour rechercher quelque chose (si je sais ce que je cherche). Si vous devez explorer un XML très volumineux, il peut être utile d'enregistrer le fichier xml en tant que fichier .xml et de l'ouvrir avec une application qui a la coloration syntaxique pour xml (le bloc-notes ++ est généralement suffisant).

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Select Rows([1, 2]) << Hide and Exclude(1) << Clear Select;
gb = dt << Graph Builder(
Size(528, 456),
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Smoother(X, Y, Legend(10)))
);
// Report(gb) << Get Xml; // works also on report
gb << Get XML; // run just this line to see xml in log or use Write() (write is the cleanest option)
// Write(gb << Get XML);
// xml_str = gb << get xml;
// show(xml_str);
where_tb = Report(gb) << XPath("//TextBox[contains(text(), 'Where(')]");
where_tb << Text Color("Blue"); // usually used to hide where text << Set Visibility("Collapse");
et c'est là que je placerais << Get XML dans votre script, exécutez-le une fois, vérifiez le xml, puis supprimez la ligne du code car il est généralement inutile de laisser << Get XML dans des scripts prêts à l'emploi.
