Korrelationsdiagramm ohne Änderung der DatentabellenstrukturIch möchte ein Korrelationsdiagramm erstellen, um getestete Parameter (ID) zwischen TestStages für verschiedene Teile zu vergleichen, wie in der beigefügten Beispieldatentabelle gezeigt.
Ich möchte den Median für Id1 (für alle Teile) auf der X-Achse und den Median für Id2 (für alle Teile) auf der Y-Achse mit zugehörigen Grenzwerten, Ref. Linien auf den jeweiligen Achsen (d. h. vertikale LSL/USL-Linien für TestStage 1 werden auf der x-Achse benötigt, während horizontale LSL/USL-Linien für TestStage 2 auf der y-Achse benötigt werden).
Wie geht das, ohne die Datentabellenstruktur mithilfe von JSL zu ändern?
Wie unten beschrieben, kann ich diese Art von Korrelationsdiagramm erstellen, wenn ich den Median für Id1 und Id2, Grenzwerte usw. als Spaltendaten habe (nicht als Zeilendaten wie im Anhang).
Ich möchte die Datentabellenstruktur (die ich mit einem anderen JSL-Skript abrufe) nicht ändern oder darauf basierend eine neue Datentabelle generieren (mithilfe von split() wie unten), daher meine Frage.
Names Default To Here (1);
Data Table( "egDataTable" ) << Split(
Split By( :TestStage ),
Split( :Median, :LSL, :USL ),
Remaining Columns( Drop All ),
Sort by Column Property
);
Graph Builder(
Size( 528, 457 ),
Show Control Panel( 0 ),
Variables(
X( :Median 1 ),
X( :LSL 1, Position( 1 ) ),
X( :USL 2, Position( 1 ) ),
Y( :Median 2 ),
Y( :LSL 2, Position( 1 ) ),
Y( :USL 2, Position( 1 ) )
),
Elements(
Points( X( 1 ), X( 2 ), X( 3 ), Y( 1 ), Y( 2 ), Y( 3 ), Legend( 65 ) )
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
65,
Properties(
0,
{Marker( "Star" )},
Item ID( "Median 2 / Median 1", 1 )
),
Properties(
1,
{Marker( "Minus" )},
Item ID( "LSL 2 / Median 1", 1 )
),
Properties(
2,
{Marker( "Minus" )},
Item ID( "USL 2 / Median 1", 1 )
),
Properties(
3,
{Marker( "Pipe" )},
Item ID( "Median 2 / LSL 1", 1 )
),
Properties( 4, {Marker( "Minus" )}, Item ID( "LSL 2 / LSL 1", 1 ) ),
Properties( 5, {Marker( "Minus" )}, Item ID( "USL 2 / LSL 1", 1 ) ),
Properties(
6,
{Marker( "Pipe" )},
Item ID( "Median 2 / USL 2", 1 )
),
Properties( 7, {Marker( "Minus" )}, Item ID( "LSL 2 / USL 2", 1 ) ),
Properties( 8, {Marker( "Minus" )}, Item ID( "USL 2 / USL 2", 1 ) )
)}
)
)
);
Automatisierung und SkripterstellungBetreff: Korrelationsdiagramm ohne Änderung der DatentabellenstrukturHallo @Neo ,
Ich bin mir nicht sicher, ob ich Ihr Problem vollständig verstehe, aber ich habe es folgendermaßen interpretiert, um meiner Meinung nach eine Lösung zu finden. Zunächst einmal ist klar, dass Sie die Tabellenstruktur nicht ändern möchten, was verständlich ist, insbesondere wenn Sie dies so entwerfen, dass es als automatisiertes JSL-Skript oder so ausgeführt wird.
Das folgende JSL-Skript ist EINE Möglichkeit, dies zu tun. Ich bin mir sicher, dass es noch viele andere gibt, aber es bringt Sie zumindest in die richtige Richtung, wo Sie es jetzt nach Ihren Wünschen bearbeiten können, hinsichtlich Farbe, Stil usw. Es ist vielleicht nicht genau das, was Sie suchen, aber ich denke, es sollte in der Nähe sein.
Names Default To Here( 1 );
dt = Data Table( "egDataTable" );
dt << New Column( "Median1", Continuous, Numeric );
dt << New Column( "Median2", Continuous, Numeric );
For( i = 1, i <= N Rows( dt ), i++,
If(
:TestParameter[i] == "Id1" & :TestStage[i] == 1,
:Median1[i] = :Median[i];
_LSL1_ = :LSL[i];
_USL1_ = :USL[i];,
:TestParameter[i] == "id2" & :TestStage[i] == 2,
:Median2[:PartNumber[i]] = :Median[i];
_LSL2_ = :LSL[i];
_USL2_ = :USL[i];,
.
)
);
Graph Builder(
Graph Spacing( 4 ),
Variables( X( :Median1 ), Y( :Median2 ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch(
{},
"Median1",
ScaleBox,
{Min( 0 ), Max( 1.1 ), Inc( 0.2 ), Minor Ticks( 1 ), Add Ref Line( _LSL1_, "Solid", "Blue", "LSL1", 1 ),
Add Ref Line( _USL1_, "Solid", "Blue", "USL1", 1 )}
),
Dispatch(
{},
"Median2",
ScaleBox,
{Min( -0.03 ), Max( 0.8 ), Inc( 0.1 ), Minor Ticks( 0 ), Add Ref Line( _LSL2_, "Solid", "Blue", "LSL2", 1 ),
Add Ref Line( _USL2_, "Solid", "Blue", "USL2", 1 )}
),
Dispatch( {}, "400", ScaleBox, {Legend Model( 3, Properties( 0, {Marker( "Star" )}, Item ID( "Median2", 1 ) ) )} )
)
);
Hoffe das hilft!,
DS
*Bearbeiten: Eine Sache, die ich erwähnen wollte, ist, dass Sie, wenn Sie dies für die Arbeit mit anderen Arten von Datentabellen verallgemeinern möchten, möglicherweise eine Konsistenz zwischen den Beschriftungen in Betracht ziehen sollten. Beispielsweise enthält Ihre TestParameter-Spalte eine Mischung aus Klein- und Großbuchstaben. z. B. Id1, id2, id3, anstatt dass alle ID# oder id# usw. sind. Bei der bedingten Codierung ist es manchmal viel einfacher, wenn Sie eine konsistente Syntax haben, sodass die Wahrscheinlichkeit geringer ist, dass Sie aufgrund der Groß- und Kleinschreibung debuggen müssen.
Betreff: Korrelationsdiagramm ohne Änderung der Datentabellenstruktur@SDF1 Vielen Dank für Ihre Beiträge.
Die Tabelle, die ich angehängt habe, ist eine erfundene Beispieltabelle, damit ich zeigen kann, wie die Handlung aussehen soll. Im tatsächlichen Fall werden in jeder Teststufe etwa 50 Testparameter getestet und es gibt 10 Teststufen.
Ich möchte nicht für jeden getesteten Parameter in jeder Testphase (Ihr Skript, wenn ich das richtig verstehe) eine Spalte generieren, um sie mit einer anderen Testphase zu vergleichen, es sei denn, es gibt einen anderen Ansatz, bei dem keine neuen Spalten generiert werden müssen. Außerdem werden Tausende von Teilen getestet, sodass der Datensatz normalerweise zunächst recht groß ist.
Ich denke, ich werde meinen Ansatz ändern und den Benutzer auswählen lassen, welche zwei Testphasen und welche Parameter korreliert werden müssen, und dann von dort aus fortfahren.
Wenn es einen effizienteren Ansatz gibt, bin ich ganz Ohr/Auge 
Betreff: Korrelationsdiagramm ohne Änderung der DatentabellenstrukturHallo @Neo ,
Ich dachte, die Datentabelle sei nur ein Modell. Bei so vielen Testparametern und Stufen, die Sie haben, verstehe ich, warum Sie keine neuen Spalten generieren möchten. Wenn Sie keine neuen Spalten erstellen oder die Datentabelle aufteilen möchten, gibt es eine andere Möglichkeit, die gewünschten Daten grafisch darzustellen. Allerdings sind die Statistiken, die Sie damit erstellen können, eingeschränkt, da es sich bei den Daten nicht um eine eigene Spalte handelt. Sie können es nicht wie Spalten auf anderen Plattformen in JMP verwenden.
Der folgende Code generiert ein Diagramm im gleichen Stil wie Sie möchten, dient jedoch nur der Anzeige, da es sich bei den grafisch dargestellten Daten um Daten handelt, die als Vektor im Speicher und nicht als Spalte in der Datentabelle gespeichert sind. Sie können immer noch einige Statistiken erstellen – ich habe einige Statistiken wie den Mittelwert und 1 Standardabweichung als Oval um den Mittelwert eingefügt. Aufgrund dessen, was ich zuvor erwähnt habe, werden Sie jedoch bei einigen Dingen eingeschränkt sein. Hier kann man zum Beispiel keine Dichteellipse erstellen (zumindest weiß ich nicht, wie das geht).
Ich denke, Sie sollten in der Lage sein, das Skript so zu verallgemeinern, dass es mit den vielen Teststufen, Parametern und Teilen funktioniert, die Sie haben. Im Grunde würden Sie einfach die Tabelle durchlaufen, um alle Vektoren im Speicher zu speichern, und dann vielleicht ein Popup-Fenster haben (via Expr() ), damit der Benutzer auswählen kann, welche Testphasen er betrachten möchte.
Ausgang:

Skript:
Names Default To Here( 1 );
dt = Data Table( "egDataTable" );
xrows = dt << RowSelection( Select Where( :TestStage == 1 ) ) << get selected rows();
xx = dt:Median[xrows];
xMean = Matrix( Mean( xx ) );
Xstdev = Std Dev( xx );
yrows = dt << RowSelection( Select Where( :TestStage == 2 ) ) << get selected rows();
yy = dt:Median[yrows];
yMean = Matrix( Mean( yy ) );
Ystdev = Std Dev( yy );
obj = New Window( "Example",
gbox = Graph Box(
Frame Size( 300, 300 ),
YName( "Median 2" ),
XName( "Median 1" ),
Y Scale( _LSL2_ - 0.1, _USL2_ + 0.1 ),
X Scale( _LSL1_ - 0.1, _USL1_ + 0.1 ),
Marker( Marker State( 11 ), Color State( 0 ), xx, yy ),
Marker( Marker State( 0 ), Color State( 4 ), xMean, yMean ),
Pen Color( "Green" ),
Oval( xMean - Xstdev, yMean + YStdev, xMean + Xstdev, yMean - Ystdev ),
Title( "Median 2 vs Median 1" )
)
);
yaxisbox = gbox[axisBox( 1 )];
xaxisbox = gbox[axisBox( 2 )];
yaxisbox << Add Ref Line( _LSL2_, "Line", blue, "LSL2" );
yaxisbox << Add Ref Line( _USL2_, "Line", blue, "USL2" );
xaxisbox << Add Ref Line( _LSL1_, "Line", blue, "LSL1" );
xaxisbox << Add Ref Line( _USL1_, "Line", blue, "USL1" );
Ich hoffe, das hilft dir beim Einstieg!,
DS