Hallo. Gibt es eine Methode, um die Variablennamen und -rollen abzurufen, die in einem Diagrammerstellungsfenster verwendet werden? Angenommen, ich habe ein Fenster mit einem Graph Builder-Plot. Gibt es eine Möglichkeit, programmgesteuert zu bestimmen, welche Variable für X, Y, Xgroup, Ygroup usw. verwendet wurde?
Angenommen, der Benutzer hat einen Plot in GB erstellt. Jetzt möchten sie ein allgemeines Skript auf dem Plot ausführen (z. B. ein Grafikskript). Das Skript muss wissen, welche Variablen in welchen Rollen verwendet wurden, ohne dass der Benutzer es mitteilt.
Angenommen, ich beginne mit dieser Handlung:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
Jetzt möchte ich ein Skript für die resultierende Handlung ausführen. Mein Drehbuch weiß nicht, was in der Handlung enthalten ist. Hier sind zwei Dinge, die ich versucht habe, aber nicht funktioniert haben:
Names Default to Here(1);
//Try to get script used to create plot
win = Window(1); //gets most recent window clicked on
gb = win << Report; //DNW: returns missing (win is not a platform)
scr = gb << Get Script; //from here I could parse the string to determine the roles
//Another stab: try to read the XML
win = Window(1);
str = win << Get XML; //This gives me the XML of the window, but does not provide the actual variable names used in the roles.
Wenn ich herausfinden könnte, wie ich die Fensterreferenz in einen Bericht umwandeln kann, könnte ich die erste Methode zum Laufen bringen. Irgendwelche Ideen?
</CODE></P></LINGO-BODY><LINGO-LABS id="lingo-labs-272624" slang="en-US" mode="NONE"><LINGO-LABEL>Erweiterte statistische Modellierung</LINGO-LABEL><LINGO-LABEL>Massenanpassung</LINGO-LABEL><LINGO-LABEL>Qualitäts- und Verfahrenstechnik</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-273136" slang="en-US" mode="NONE">Betreff: Variablennamen vom Graphbuilder abrufen</LINGO-SUB><LINGO-BODY id="lingo-body-273136" slang="en-US" mode="NONE">Danke. Das war genau das, was ich brauchte.</LINGO-BODY><LINGO-SUB id="lingo-sub-273026" slang="en-US" mode="NONE">Betreff: Variablennamen vom Graphbuilder abrufen</LINGO-SUB><LINGO-BODY id="lingo-body-273026" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/3648" target="_blank">@nikles</A> Sie haben Recht, die Hover-Label-Funktionalität basiert auf Interaktivität. Es gibt Möglichkeiten, dies mithilfe von JSL auszulösen (durch Bewegen der Maus, Anhalten usw.), aber das würde die Lösung erheblich komplexer machen, die Sie wirklich nicht benötigen.</P>
<P>Basierend auf Ihrer Antwort auf und dem Lösungsvorschlag von<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2687" target="_blank"> @txnelson</A> , hier ist ein Skript, das Sie von der Windows-Referenz bis hinunter zu den Graph Builder-Variablenreferenzen führt.</P>
<PRE><CODE class=" language-jsl">Names Default to Here(1);
win = New Window("A Title", // Let's create a Window that contains a Graph Builder
Graph Builder( // with a LDF to make things interesting (multiple OutlineBoxes).
Size( 517, 448 ),
Show Control Panel( 0 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
Local Data Filter(
Add Filter( columns( :height ), Where( :height >= 60.048 & :height <= 70 ) )
)
));
ob = win[OutlineBox("Graph Builder")]; // This is how you get the Display Box that contains the GB object
gbb = ob << Get Scriptable Object; // Now we extract the GB object from the Display Box
gb_expr = gbb << Get Script; // You could wrap in Char() to get the GB script as a string
gb_nargs = NArg(gb_expr); // and use pattern matching. Instead,
for(i = 1, i <= gb_nargs, i++, // let's see how to inspect it as an expression.
child = Arg(gb_expr, i);
If (HeadName(child) == "Variables",
var_nargs = NArg(child);
for(j = 1, j <= var_nargs, j++,
Show(Arg(child, j))
);
Break();
)
);
Das solltest du sehen:
Arg(child, j) = X(:sex);
Arg(child, j) = Y(:height);
Mit den in JMP 15 hinzugefügten Hover-Label-Erweiterungen können Sie ein Skript definieren, das im Kontext eines Diagramms ausgeführt wird (genauer gesagt ein Hover-Label-Ausführungskontext). Dieser Kontext stellt in lokalen Variablen Informationen über das visuelle Element bereit, über das der Mauszeiger bewegt wird, einschließlich der Variablen, die als „Gruppierungen“ (X, GroupX, GroupY usw.) verwendet werden, und Maßeinheiten (Y, Farbe, Größe usw.).
Sie können in Ihrem eigenen Skript auf diese Variablen zugreifen und sie möglicherweise zum Definieren einer neuen Visualisierung oder Analyse verwenden. Genau so funktionieren die Hover-Label-Voreinstellungen. Möglicherweise möchten Sie einen auswählen und sich dann den generierten JSL-Code im Hover-Label-Editor (oder durch Speichern des Skripts) ansehen, um ein Beispiel zu sehen.
Sie können ihre Werte auch sehen, indem Sie die Textlet-Voreinstellung „Kontext“ verwenden (verfügbar im Textlet-Bedienfeld im Hover-Label-Editor):

Es wird eine vollständige Liste der Variablen angegeben, die im Ausführungskontext verfügbar gemacht werden Hier.
Ich dachte, dass ich mich an eine frühere Frage zu diesem Thema erinnere, aber ich habe gesucht und keine gefunden.Unabhängig davon besteht die Methode, die ich verwendet habe, um so etwas zu tun, darin, eine Nachricht an Graph Builder zu senden, um das zum Erstellen der Anzeige verwendete Skript in eine Zeichenvariable abzurufen, und dann analysiere ich die Zeichenfolge, um die genannten Variablen zu finden .
Das Drehbuch
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
gb = Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
theScript = char(gb << get script);
show(theScript);
ruft ab:
theScript = "Graph Builder(Variables(X(:weight), Y(:height)), Elements(Points(X, Y, Legend(6)), Smoother(X, Y, Legend(7))))";