Graph Builder, wie man die Farbe eines Elements ändert und Informationen zur SendToReport-SyntaxHallo,
Ich erstelle ein Diagramm mit dynamischem Inhalt (die Anzahl der Variablen wird zur Laufzeit bestimmt).
Ich möchte nach dem Einrichten des Graph Builders einige Dinge ändern, z. B. eine neue Farbe zuweisen. Der Grund, dies nachträglich zu tun, liegt darin, dass ich die Änderungen nicht kenne, bevor ich andere Teile meines Skripts ausführe, die ich nicht früher ausführen kann.
Ich habe mein Grundproblem auf dieses Beispiel vereinfacht:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
// do some other stuff incl. addition or removal of variables to gb
// how do I *MODIFY* the color of Points, Smoother here or add a Line Plot?
Ich kenne die Position der Variablen im Diagramm, falls das hilft (1,1 im Beispiel oben).
Beifall,
Alex
Betreff: So ändern Sie die Farbe einer LinieHallo Alex,
Entschuldigung für die verspätete Antwort.
Angenommen, die folgende Legend Model-Nachricht wird gesendet.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
- Das erste Argument (2) ist eine eindeutige ID, die auf ein bestimmtes Legendenmodell innerhalb der ScaleBox verweist. Im obigen Beispiel würde sich ein Wert von 1 auf das Legendenmodell beziehen, das die Punkte enthält, während ein Wert von 2 auf die glatteren Linien verweist.
- Das zweite Argument (Properties( 1, {Line Color( 4 )} )) enthält Informationen darüber, welches Element innerhalb des Legendenmodells einen bestimmten Satz von Eigenschaften anwenden soll.
- Das erste Argument in „Eigenschaften“ (1) ist eine auf Null basierende Elementnummer, um anzugeben, auf welches Element die neue Eigenschaft angewendet werden soll.
- Das zweite Argument innerhalb von Properties ({Line Color( 4 )}) ist eine Liste von Eigenschaften, die auf ein bestimmtes Legendenmodellelement angewendet werden sollen. In diesem Fall ändern wir die Linienfarbe auf Grün.
Hier ein paar Beispiele:
Das folgende Skript setzt das erste Element im ersten Legendenmodell (Punkte) auf grün. In diesem Fall ist das erste Element „F“.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 1, Properties( 0, {Line Color( 4 )} ) )}
)
)
);
(Von nun an gebe ich nur noch den Teil des Legendenmodells an, der im obigen Skript ersetzt werden soll.)
Das folgende Legendenmodell-Snippet ändert die Farbe des zweiten Elements („M“) im Punktelegendenmodell.
Legend Model( 1, Properties( 1, {Line Color( 4 )} ) )
Das folgende Legendenmodell-Snippet ändert die Farbe des ersten Elements („F“) im Legendenmodell mit glatteren Linien.
Legend Model( 2, Properties( 0, {Line Color( 4 )} ) )
Das folgende Legendenmodell-Snippet ändert die Farbe des zweiten Elements („M“) innerhalb des Legendenmodells mit glatteren Linien.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
HINWEIS: Wenn Sie die Linienfarbe der glatteren Linie ändern, ändert sich auch die Farbe der entsprechenden Punkte. Eine Änderung der Punktfarbe der Punkte hat jedoch keinen Einfluss auf die Farbe der zugehörigen glatteren Linie.
Betreff: So ändern Sie die Farbe einer LinieDanke für die Bewertung.
Könnten Sie bitte auch die Syntax des Legendenmodells erläutern?
Betreff: So ändern Sie die Farbe einer LinieDie Syntax für das SendToReport-Argument lautet wie folgt (aus dem Skriptindex):
SendToReport( Dispatch( "Outline name", "Element name", Element type, command );
Das zweite Argument im Dispatch-Befehl („Elementname“) wird als Bezeichner verwendet, um die richtige DisplayBox zu finden. Dieses Argument würde beispielsweise mit dem Attribut „helpKey“ übereinstimmen, wenn ein Dispatch-Befehl für eine FrameBox verwendet wird. Das Elementtyp-Argument teilt JMP mit, nach welchem Attributtyp gesucht werden soll (da dieser für verschiedene DisplayBoxen unterschiedlich ist).
Bei einer ScaleBox (wie in diesem Fall erforderlich) verweist das Elementnamenargument auf das Attribut „charID“. Graph Builder erstellt mehrere ScaleBoxes für verschiedene Zwecke, aber die CharID „400“ wird der ScaleBox zugewiesen, die zum Senden von Nachrichten wie dem Legend Model benötigt wird.
Unten finden Sie einen Auszug aus dem XML für einen Graph Builder (erstellt mit den Skripten weiter unten), der die fünf erstellten ScaleBoxes zeigt. Sie werden feststellen, dass eines der Maßstabsfelder die CharID „400“ hat. Dies ist das Maßstabsfeld, das wir für die Legendenmodellnachricht verwenden müssen.
<..truncated..>
<..truncated..>
<..truncated..>
Eine andere Möglichkeit, die Legend Model-Nachricht zu verwenden, besteht darin, sie direkt an diese ScaleBox zu senden. Eine Möglichkeit, auf diese ScaleBox zu verweisen, ist die Verwendung von XPath, wie unten gezeigt. Diese Methode verweist auf die ScaleBox mit der CharID „400“.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
scalebox = gb << xpath("//ScaleBox[@charID=\!"400\!"]");
scalebox << Legend Model( 2, Properties( 1, {Line Color( 4 )} ) );
Das folgende Skript macht dasselbe, verwendet jedoch stattdessen die SendToReport-Methode.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )}
)
)
);
Danke,
Betreff: So ändern Sie die Farbe einer LinieDies ist eine großartige Anfrage für die JMP-Entwicklung, nämlich die Dokumentation des Innenlebens des Graph Builders.
Betreff: So ändern Sie die Farbe einer LinieIch mache das Gleiche, aber jetzt, wo ich den generierten Code sehe, muss ich ihn verstehen können.
Ich konnte keine Dokumentation für Legend Model und auch nicht für „400“ finden.
Deshalb habe ich um Hilfe gebeten und würde mich über Feedback sehr freuen.
Betreff: So ändern Sie die Farbe einer LinieNicht die gesamte „innere“ Syntax des Graph Builders ist dokumentiert. Wenn es um GB geht, mache ich Folgendes:
Erstellen Sie ein Diagramm, das genau so aussieht, wie ich es möchte, einschließlich Diagrammtyp, Symbolen, Farben, Linien usw.
Klicken Sie auf das kleine rote Dreieck, um den JSL-Code zu erhalten
Betten Sie den JSL-Code in mein Skript ein
Im Grunde lasse ich GB die schwere Arbeit erledigen und verwende dann den Code, den es generiert.
Betreff: So ändern Sie die Farbe einer LinieHallo Ian,
danke für das tolle Beispiel.
Könnten Sie mich bitte auf den Teil des Skripthandbuchs verweisen, der Informationen zur Syntax des Legendenmodells und zur Bedeutung des Werts „400“ enthält?
Ich habe nach den Wörtern „Legendenmodell“ gesucht – keine Treffer. 400 hatte mehrere Treffer, aber ich konnte nichts Relevantes identifizieren.
Ich danke Ihnen für Ihre Hilfe!
Beifall,
Alex
Betreff: So ändern Sie die Farbe einer LinieMachen Sie es einfach interaktiv und überprüfen Sie dann den Code, den JMP für Sie generiert. Anpassung Ihres Beispiels:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
// Add 'weight'
Wait(2);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable({Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )});
// Change the colour of the points and smoother for 'weight' to green
Wait(2);
gb << SendToReport( Dispatch({}, "400", ScaleBox, {Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )} ) );
Zu der weniger wichtigen Frage können Sie unter „Hilfe > Bücher > Skripthandbuch“ nachsehen, wo häufig einige Hinweise gegeben werden.
Betreff: So ändern Sie die Farbe einer LinieIch hatte ähnliche Fragen, bekam aber nie Antworten. Es scheint, dass die JMP-Experten in diesem Forum diese Frage meiden oder JMP-Benutzer nicht dazu ermutigen, sich tiefer damit zu befassen.
Betreff: So ändern Sie die Farbe einer LinieHier ist ein besseres Beispiel. Wie ändere ich die Farbe der Punkte und die Glättung für die Gewichtung in diesem Fall?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable(
{Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )}
);
gb << SendToReport(
Dispatch( {}, "400", ScaleBox, {Legend Model( 1, Properties( 0, {Line Color( RGB color(31,119,180) ), Fill Color( 0 )} ) )} )
);
weniger wichtige Fragen:
Was bedeutet „400“ in diesem Zusammenhang?
Betreff: So ändern Sie die Farbe einer LinieHallo @Justin_Chilton , welche zusätzlichen Bezeichner werden außer helpKey und charID für die Elementnamen verwendet?
Wenn ich eine Achsenbeschriftung ändere, lautet der JSL-Code
gb << SendToReport( Dispatch( {}, "<STRONG>X Title</STRONG>", TextEditBox, {Set Text( "new" )} ))... aber der X-Titel erscheint nicht im XML-Code des Anzeigebaums. Welcher Bezeichner ist das?
Mit Displayboxen sprechen