Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Hallo,
Ich zeichne regelmäßig Verteilungsdiagramme.An manchen Tagen erhalte ich nur ein paar Datenspalten, an manchen Tagen deutlich mehr.
Sobald die einzelnen Diagramme generiert sind, muss ich ihre jeweiligen Min/Max-Y-Achsen zur besseren Lesbarkeit anpassen und dann ein paar Referenzlinien hinzufügen (im Wesentlichen USL- und LSL-Linien).Nach einer Weile wird es langweilig, vor allem, wenn es viele Datenspalten gibt.
Ich würde gerne sehen, ob es eine Möglichkeit gibt, diesen Prozess zu automatisieren, da der Prozess selbst relativ einfach ist und sich wiederholt. Ich denke, dass JSL-Skripting hier die Lösung sein kann (ich bin sehr neu im Skripting).
Folgendes möchte ich mit dem Skript tun:
1. Jede Datenspalte besteht aus 5 Datenpunkten, wobei die 1. und 2. Zeile die USL bzw. LSL enthalten
2. Das Skript sollte alle Datenspalten lesen
3. Zeichnen Sie individuelle Verteilungsdiagramme für alle Daten
4. Fügen Sie USL- und LSL-Referenzlinien hinzu (können wir hier die Linienstärke und -farbe festlegen?)
5. Ändern Sie dann den Min-Wert der Y-Achse auf LSL-0,003 und den Max-Wert der Y-Achse auf USL auf USL+0,003
Kann JSL das oben Genannte tun?
Danke schön!
Automatisierung und SkripterstellungBetreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Kurze Antwort: JSL kann das.
Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?- Willkommen in der Community
- Ja, ein JMP-Skript kann die von Ihnen beschriebenen Aufgaben problemlos ausführen.
- JMP zeigt automatisch Ihre USL- und LSL-Werte in jedem der Diagramme an.Die von Ihnen beschriebene Datenstruktur ist jedoch keine normale Struktur für JMP.Es ist ziemlich einfach, einem Skript die JSL hinzuzufügen, um die USL- und LSL-Daten zu übernehmen und sie in die Spalteneigenschaft „Spec Limits“ für jede Spalte zu verschieben und dann die ersten beiden Zeilen Ihrer Daten zu löschen.
- Ihre Datenbeschreibung scheint darauf hinzudeuten, dass Sie nur drei Datenpunkte für jede Datenspalte haben.(5 Datenpunkte abzüglich der LSL- und USL-Zeilen) und erstellen daraus Verteilungsdiagramme.In der JMP-Terminologie ist ein Verteilungsdiagramm eine Histogrammanzeige.Ist es das, was Sie als Diagramm angeben, das Sie benötigen?Wenn ja, wie erstellen Sie dieses Diagramm aus 3 Datenpunkten?
- Das Ändern der Min- und Max-Werte der Achse ist sehr einfach und kann zu Ihrem Skript hinzugefügt werden.
- Meine Interpretation dessen, was Sie in Ihrem ersten Eintrag beschrieben haben, ist möglicherweise völlig falsch.Es wäre schön, wenn Sie ein Beispiel der von Ihnen verwendeten Daten und eine Illustration des Diagramms bereitstellen könnten, das angezeigt werden soll.
- Ich schlage vor, dass Sie sich die Zeit nehmen, das Dokument „Discovering JMP“ durchzulesen, das im Pulldown-Menü „Hilfe“ in JMP verfügbar ist.
Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Danke für deine Antwort.
Bei Punkt 4 tut es mir leid, dass ich mich nicht gut erklärt habe. Zur Klarstellung: Jede Spalte enthält 7 Datenzeilen. Die 1. Reihe ist die LSL und die 2. Reihe ist die USL. Die Zeilen 3 bis 7 sind die tatsächlichen Daten.
Für Punkt 6 sind hier meine Beispieldaten und die daraus resultierenden Diagramme:


Für das Diagramm in diesem Beispiel werden auch die erste und zweite Datenzeile eingezeichnet, was ich nicht möchte. Sie sind LSL bzw. USL. Normalerweise beziehe ich die LSL und USL nicht in die Daten ein.
Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Hier ist ein Beispielskript, das das erzeugt, was Sie wollen

Names Default To Here( 1 );
// Create the data table
// dt = open( "<PATH to="" the="" file="" that="" has="" the="" data="https://community.jmp.com/">" );
// Here is the sample data table you provided
dt = New Table( "Example",
Add Rows( 7 ),
New Column( "Data1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [9.5, 10.5, 10, 10.2, 9.7, 9.6, 10.4] )
),
New Column( "Data2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4.5, 5.5, 5, 5.1, 5.2, 4.9, 4.7] )
)
);
// Ge all of the numeric column's names
colNameList = dt << get column names( string, continuous );
//Take the data from rows 1 & 2 and create the Spec Limints column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform, having the Spec Limits as
// Column Properties, will insure the proper Min and Max for
// the Y axis
dt << Distribution( column( eval(colNameList) ));</PATH>Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Oh wow.. Ich habe sicherlich nicht erwartet, dass Sie das Drehbuch schreiben würden – Danke!
Ich habe gesehen, dass es im vorderen Teil des Skripts darum geht, die Beispieltabelle mit Daten zu erstellen, die ich zuvor bereitgestellt habe. Wie ändere ich es, damit ich das Skript auffordern kann, auf eine vorhandene Datentabelle meiner Wahl zu verweisen (ich nehme an, das ist die JMP-Datei) und es dann ausführen kann?
Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Tisch öffnen: Skripthandbuch > Datentabellen > Erste Schritte mit Datentabellen (verwenden Offen() )
Pfad aus Benutzerauswahl abrufen Datei auswählen()
Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Meiner Meinung nach muss ich den anderen Codesatz integrieren, bei dessen Beantwortung Sie aus meinem anderen Thread geholfen haben:
If( Is Missing( fn ),
throw(),
// Else Open the selected file
Open( fn )
);
Ich nehme an, dass ich die Datei nach dem Öffnen als Datentabelle laden muss? Was bedeutet die Verwendung der dt-Syntax?
Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Sie verwenden Open(), um die Datentabelle zu öffnen. open gibt dann einen Verweis auf die geöffnete Datentabelle zurück (sofern die Datei erfolgreich geöffnet werden konnte), die dann in der Variablen dt gespeichert wird
dt = Open("myfile.jmp");Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Ich habe das zuvor von einem der Mitwirkenden freigegebene Skript geändert (vielen Dank), sodass der Benutzer auswählen kann, welche Datendatei (.jmp) geöffnet werden soll:
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));Beim Ausführen des Skripts ist der folgende Fehler aufgetreten:
Send erwartet ein skriptfähiges Objekt beim Zugriff oder bei der Auswertung von „Send“, dt << /*###*/spaltennamen abrufen( string, fortlaufend) /*###*/
Anscheinend gibt es ein Problem mit dt << Spaltennamen abrufen?
Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Sie haben dt als Dateipfad, es handelt sich also um eine Zeichenfolge. Es muss wie unten beschrieben auf die neu geöffnete Datei verweisen. Beachten Sie die Open()-Anweisung
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
dt = Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?In einen neuen Thread mit einem relevanteren Titel verschoben.
Betreff: Kann JSL verwendet werden, um unter anderem das Plotten von Diagrammen und das Hinzufügen von Ref-Linien zu automatisieren?Dieser Code ist etwas übersichtlicher:
// Get the filename of the .jmp file to open
filename = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( filename ),
Throw(),
// Else Open the selected file
dt = Open( filename )
);