Senden Sie Befehle an mehrere bivariate DiagrammeIch habe ein Skript, das eine Reihe bivariater Plots in einem einzigen Fenster generiert und dabei eine LineUpBox verwendet, um jeden Plot zu enthalten.Nachdem die Diagramme erstellt wurden, möchte ich, dass der Benutzer die Punkte des Diagramms ein-/ausschalten kann (ich beabsichtige, weitere Optionen hinzuzufügen ... dies dient nur als Beispiel).Ich stelle mir eine Schaltfläche oder ein Kontrollkästchen im Fenster vor, auf das der Benutzer klicken kann, und alle Diagramme werden diese Aktion widerspiegeln.
Für einen einzelnen Plot würde ich den Befehl verwenden:
bvp << Show Points(0/1);
Dabei ist bvp der Verweis auf das bivariate Diagramm.Allerdings habe ich hier mehrere Plots und kann nicht eine einzige Referenz für alle verwenden.Ich habe stattdessen versucht, auf meine LineUpBox zu verweisen, die die Plots enthält:
For(plid = 1, plid <= nplots, plid++,
LUB_plots[plid] << Show Points(pts)
)
wobei LUB_plots der Verweis auf meine Lineupbox ist.Diese Schleife würde beispielsweise jedes Mal ausgeführt, wenn der Benutzer das Kontrollkästchen aktiviert.Wenn ich das mache, erhalte ich die folgenden Fehlermeldungen:
The display box 'OutlineBox' does not recognize the message 'Show Points'; perhaps you mean one of these: <<Show Properties <<Show HelpKeys <<SetHorizontal <<Horizontal <<SetOpen <<GetHorizontal <<Close Where No Outlines <<Font <<Set Font <<Set Font Style <<Set Font Size <<Reshow <<Set Report Title <<Set Window Title <<Top Parent <<Show Tree Structure <<Restore Window Size <<Set Window Size <<Set Content Size <<Get Window Position <<Show Window <<Get Show Window <<Set Window Title <<Set Window Icon <<Set Print Headers <<Set Print Footers <<Scroll Window <<Set Width <<Set Height <<Horizontal Alignment.
und eine Instanz des Folgenden für jedes Diagramm:
(The following message might not be an actual error; the preference 'Report Invalid Display Box Messages' is ON.) The display box 'OutlineBox' does not recognize the message 'Show Points'.
Ich habe die Baumstruktur überprüft und bestätigt, dass es sich bei dem oberen Anzeigefeld tatsächlich um ein Umrissfeld handelt.So weiß ich zumindest, dass LineUpBox[plid] dorthin zielt, wo ich es erwartet habe.Das Problem scheint darin zu liegen, dass mein Befehl <
Meine Frage: Wie kann ich auf mehrere bivariate Diagramme verweisen?Gibt es alternativ eine bessere Möglichkeit, Befehle an mehrere bivariate Diagramme zu senden, nachdem diese erstellt wurden?Vielleicht mit einer Art Dispatch/SendtoReports-Befehlsstruktur?
Ich bin mir nicht sicher, wie ich die Community überhaupt nach diesem durchsuchen soll.Jede Hilfe wird geschätzt.
Betreff: Befehle an mehrere bivariate Diagramme sendenDanke noch einmal.Elegant.
Betreff: Befehle an mehrere bivariate Diagramme sendenDiese Syntax scheint zu funktionieren:
y_axes = (lub << xpath("//AxisBox[@charID='2']"));
y_axes << scale(Log);
Die XPath-Dokumentation finden Sie beispielsweise unter w3schools-Tutorial zu XPath
Betreff: Befehle an mehrere bivariate Diagramme sendenDanke!Das xpath-cmd funktioniert hervorragend für mein Showpoint-Beispiel.
Jetzt habe ich einen Nachtrag.Wie kann ich an alle meine Diagramme einen Befehl senden, der die Y-Achse von linear in logarithmisch ändert?Zunächst habe ich versucht, den Befehl xpath zu verwenden, um eine Liste aller Verweise auf alle Y-Achsen-Boxen zu erstellen.Ich versuche zunächst nur zu bestätigen, dass der xpath-Befehl die richtigen Refs abruft.Aber ich schaffe es anscheinend nicht, nur diese Kartons zurückzugeben.Als ich mir den XML-Code im Protokoll ansah, konnte ich sehen, dass die Kästchen auf der Y-Achse alle ein „charID=\!“2\! Glück.
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
Try(Window("example") << Close Window);
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
Show(lub << Get xml);
Show(lub << xpath("//AxisBox")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[2]")); //empty list
Show(lub << xpath("//AxisBox['2']")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[\!"2\!"]")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[charID=\!"2\!"]")); //empty list
Show(lub << xpath("//AxisBox[\!"charID=2\!"]")); //list of 8 displayboxesWie kann ich XPath dazu bringen, nur die 4 Y-Achsenboxen zurückzugeben?
Wenn es mir gelingt, die Verweise auf die gewünschten Achsenfelder zu generieren, muss ich dann den Befehl „Get Scriptable Object“ wie in Ihrem vorherigen Beispiel senden, oder kann ich den Befehl „Scale“ einfach direkt an die Liste der Verweise senden?
Ich habe die JMP Summit-Präsentation und die von Ihnen bereitgestellten .jsl-Codebeispiele gelesen ... sehr hilfreich.Allerdings ist zusätzliche Dokumentation im Scripting Index spärlich und scheint im Scripting Guide nicht vorhanden zu sein.Gibt es weitere Dokumentation zu XPath?Ich würde gerne wissen, welches Format die Eingabe hat.Was bewirkt zum Beispiel das „//“ am Anfang?Und wie soll ich den Rest der Eingabe formatieren, um die benötigten Anzeigefelder zu erhalten?
Danke.
Betreff: Befehle an mehrere bivariate Diagramme sendenOder viel einfacher mit xpath , inspiriert von einer JMP Summit-Präsentation, die gerade veröffentlicht wurde Hier :
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots
L = (lub << xpath("//LineUpBox/OutlineBox")) << get scriptable object;
// Send messages to all plots, e.g
L << show points(0);
Betreff: Befehle an mehrere bivariate Diagramme sendenDer Punkte anzeigen() Die Nachricht muss an die gesendet werden Bivariat Objekt und nicht auf dessen oberes Anzeigefeld. Aus einem vorhandenen Anzeigebaum kann eine Referenz auf das zugehörige Objekt abgerufen werden < .
Ein Beispiel, das auch eine Möglichkeit veranschaulicht, Nachrichten an mehrere Parzellen zu senden:
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots (here top-level Outline boxes)
L = {};
i = 1;
While(Is Scriptable(Try(lub[Outline Box(i)])),
If((lub[Outline Box(i)] << parent) << classname == "LineUpBox",
Insert Into(L, lub[Outline Box(i)] << get scriptable object)
);
i++;
);
// Send messages to all plots, e.g
L << show points(0);