Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Hallo alle,
Ich frage mich, ob jemand JSL-Code oder ein Add-In zur Verfügung hat, um ein Diagramm des Graph Builder (GB) zu nehmen und es zu quadrieren (sowohl die x- als auch die y-Achse gleich einzustellen) und eine 45-Grad-Linie hinzuzufügen. ähnlich wie die Diagramme "Ist nach Vorhergesagt" oft funktionieren, siehe Beispiel unten.

Soweit ich weiß, hat GB keine Option, dies automatisch für Sie zu tun, was schade ist, da ich oft gerne Diagramme wie die Actual by Predicted-Diagramme erstelle und die zusätzliche Vielseitigkeit der GB-Plattform zum Hinzufügen von Farben habe oder andere Arten der Formatierung der Grafik.
Vielleicht steht das auf der Wunschliste für ein neues Feature in GB?
Danke!,
DS
GrafikBetreff: Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Hallo @txnelson ,
Danke für die schnelle Antwort und den Hinweis. Dabei habe ich auch eine frühere Lösung gefunden, die Sie einem anderen Benutzer zur Verfügung gestellt haben, der etwas Ähnliches mit Fenstern und Berichten machen möchte Hier .
Durch das Hinzufügen dieser einfachen Codezeile kann ich mit der Bearbeitung und Änderung des aktuellen Graph Builder-Berichts fortfahren.
gb=Current Report()[outlinebox(1)]<<GET scriptable="" object=""></GET>
Danke für die Hilfe!,
DS
Betreff: Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Suchen Sie im Scripting-Index nach der Dokumentation zum
Aktueller Bericht()
Funktion
Betreff: Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Hallo @txnelson , @Craige_Hales , Und @David_Burnham ,
Nochmals vielen Dank für Ihre bisherige Hilfe. Ich hoffe, Sie können mir bei einem anderen Aspekt dieses Nebenprojekts helfen.
Wie in meiner letzten Antwort erwähnt, möchte ich dies so implementieren, dass es sich um ein Symbolleisten-Hotbutton-Element handelt, das Benutzer in meiner Organisation wie Add-Ins in ihrem JMP "installieren" können. Dieser Teil, den ich weiß, wie zu tun ist. Woran ich feststecke, ist, wie man ein vorhandenes offenes Fenster als Bericht behandelt, damit Sie es wie im obigen Code in diesem Beitrag manipulieren können.
Beispiel: Ein Benutzer öffnet die Datei „Big Class.jmp“ und beginnt dann manuell mit der Verwendung von Graph Builder, um Größe und Gewicht darzustellen. Dadurch wird ein untergeordnetes Fenster unter der Datentabelle Big Class mit dem Namen Big Class - Graph Builder geöffnet. Ich weiß, wie man Fensternamen und all das bekommt, aber anders als im vorherigen Code habe ich Folgendes nicht
gb = dt << Graph Builder( Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 4 ) ) )
);Daher kann ich nicht mit Report (gb) auf gb verweisen, wo es für die folgenden Manipulationen im Beispielcode von Craige verwendet wird:
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
);Bei dieser Art der Codierung ist es einfach, auf den Bericht gb zu verweisen, da Sie den Befehl an die Datentabelle gesendet haben, als Sie gb = dt << Graph Builder (.....) ausgeführt haben. In meinem Fall hätte ich das nicht, weil der Benutzer dies manuell macht (mit welcher Grafik auch immer er erstellt).
Ich möchte einen Symbolleisten-Hotbutton erstellen, den man drücken kann, der Code erhält dann den aktuellen Graph Builder-Fensternamen (falls mehr als eine Instanz von Graph Builder für diese Datentabelle geöffnet ist) und führt dann die Quadratur und Diagonale aus Zeile wie zuvor gelöst. Ich bin ratlos, wie ich vom Namen eines Fensters zum Zuweisen als Bericht übergehen kann, damit der gesamte andere Code funktionieren kann.
Vielen Dank im Voraus!,
DS
Betreff: Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Hallo @txnelson , @Craige_Hales , @David_Burnham , Und @Mark_Bailey ,
Vielen Dank für Ihr Feedback und Ihren Beitrag dazu, ich weiß das wirklich zu schätzen. Ich mag beide Versionen aus unterschiedlichen Gründen, ich mag die zusätzlichen Möglichkeiten, den Linienstil mit den Methoden von Jim und Craige zu modifizieren, aber ich mag auch den vereinfachten Funktionsstil von David und Mark. Ich konnte sehen, dass beide Methoden aus unterschiedlichen Gründen und Zielgruppen einen Wert haben.
Ich werde Ihre Vorschläge berücksichtigen und herausfinden, wie ich die JSL schreiben kann, damit sie als Symbolleisten-Hotbutton hinzugefügt werden kann, damit ich sie an andere in meiner Organisation verteilen kann.
Danke!,
DS
Betreff: Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Hinzufügen zu @David_Burnham 's-Version erkennen viele Leute nicht, dass Sie kein Skript ausführen müssen, um ein Grafikskript zu einem Plot (Frame-Box) hinzuzufügen. Du kannst interaktiv bewerkstelligen das gleiche. Klicken Sie mit der rechten Maustaste in das Plotfeld und wählen Sie Anpassen. Klicken Sie auf die Schaltfläche „Hinzufügen“ (+) und geben Sie dann den Ausdruck Y Function( x, x ) ein. Es gibt sogar ein Makro für diesen allgemeinen Ausdruck. Dieser Weg ist jetzt vielleicht nicht der beste Weg für Sie, aber ich wollte, dass Sie ihn als Alternative kennen.
Betreff: Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Eine alternative Möglichkeit, die diagonale Linie hinzuzufügen, besteht darin, die Funktionslinie y=x hinzuzufügen:
report(gb)[FrameBox(1)] << add graphics script(
Y Function( x, x )
)
Betreff: Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Hier ist eine Variation, die davon ausgeht, dass Sie die Größe des Diagramms nicht ändern oder die Achsen anpassen, nachdem es gezeichnet wurde. Jims Version setzt die Rechteckigkeit bei jedem Neuzeichnen des Diagramms zurück, was ein weiteres Neuzeichnen des Diagramms auslösen kann. Wenn Sie das wirklich brauchen, müssen Sie möglicherweise den Planer verwenden, um die Rechtwinkligkeit außerhalb des Grafikskripts zurückzusetzen.
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 von Ecke zu Ecke per Skript hinzugefügt.
Sie wollen wahrscheinlich nicht wirklich rot,3,gepunktet!
Betreff: Hat jemand ein Add-In oder einen JSL-Code zum Hinzufügen einer 45-Grad-Linie und zum Quadratisieren eines GB-Diagramms?Hier ist ein einfaches Skript, das eine quadratische Anzeige mit einer diagonalen Linie beibehält.Der Code ist so geschrieben, dass er hoffentlich alles zeigt, was vor sich geht.Es könnte weitaus effizienterer Code geschrieben werden.
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] );
);