Grafico di correlazione senza modificare la struttura datatableVorrei fare un grafico di correlazione per confrontare il parametro testato (Id) tra TestStages per parti diverse, come mostrato nella tabella di dati di esempio allegata.
Voglio mediana per Id1 (per tutte le parti) sull'asse x e mediana per Id2 (per tutte le parti) sull'asse y con limiti associati rif. linee sui rispettivi assi (es. linee verticali LSL/USL per TestStage 1 necessarie sull'asse x mentre linee orizzontali LSL/USL per TestStage 2 necessarie sull'asse y).
Come fare questo senza modificare la struttura datatable usando JSL?
Come fatto di seguito, posso eseguire questo tipo di grafico di correlazione se ho la mediana per Id1 e Id2, limiti ecc. Come dati di colonna (non come dati di riga come in allegato).
Non voglio modificare la struttura della tabella dati (che estraggo usando un altro script JSL) o generare una nuova tabella dati (usando split() come di seguito) basata su di essa, da qui la mia domanda.
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 ) )
)}
)
)
);
Automazione e scriptingOggetto: grafico di correlazione senza modificare la struttura datatableCIAO @Neo ,
Non sono sicuro di aver compreso completamente il tuo problema, ma ecco come l'ho interpretato per trovare quella che penso sia una soluzione. Prima di tutto, è chiaro che non vuoi cambiare la struttura della tabella, il che è comprensibile, specialmente se lo stai progettando per essere eseguito come uno script JSL automatizzato o qualcosa del genere.
Lo script JSL di seguito è UN modo per farlo. Sono sicuro che ce ne sono molti altri, ma almeno ti porta nella giusta direzione, dove ora puoi modificarlo come desideri, per colore, stile, ecc. Potrebbe non essere esattamente quello che stai cercando, ma penso che dovrebbe essere vicino.
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 ) ) )} )
)
);
Spero che questo ti aiuti!,
DS
* Modifica: una cosa che intendevo menzionare è che se vuoi generalizzare questo per lavorare con altri tipi di tabelle di dati, potresti prendere in considerazione la coerenza tra le etichette, ad esempio, la tua colonna TestParameter ha un mix di lettere minuscole e maiuscole, ad esempio Id1, id2, id3, invece di essere tutti ID#, o id#, ecc. Quando si esegue la codifica condizionale, a volte è molto più semplice quando si dispone di una sintassi coerente, quindi ci sono meno possibilità di dover eseguire il debug a causa del maiuscolo.
Oggetto: grafico di correlazione senza modificare la struttura datatable@SDF1 Grazie per i tuoi contributi.
La tabella che ho allegato è una tabella di esempio preparata in modo da poter mostrare come volevo che fosse la trama. Nel caso reale, ogni fase di test ha circa 50 parametri di test testati e ci sono 10 fasi di test.
Non vorrei generare una colonna per ogni parametro testato in ogni fase del test (il tuo script se ho capito bene) da confrontare con un'altra fase del test, a meno che non ci sia un altro approccio che non necessita di generare nuove colonne. Inoltre, ci sono migliaia di parti testate, quindi il set di dati è normalmente abbastanza grande per cominciare.
Penso che cambierò il mio approccio e chiederò all'utente di selezionare quali due fasi del test e quali parametri devono essere correlati e poi partire da lì.
Se c'è un approccio più efficiente, sono tutto orecchie/occhi 
Oggetto: grafico di correlazione senza modificare la struttura datatableCIAO @Neo ,
Ho pensato che la tabella dei dati fosse solo un modello. Con tutti i parametri di test e le fasi che hai, capisco perché non vorresti generare nuove colonne. Se non vuoi creare nuove colonne o dividere la tabella dei dati, c'è un altro modo per rappresentare graficamente i dati che desideri, ma sei limitato nelle statistiche che puoi fare su di esso poiché i dati non sono la propria colonna dedicata. Non puoi usarlo in altre piattaforme all'interno di JMP come puoi colonne.
Il codice seguente genererà un grafico con lo stesso stile che desideri, ma è solo per scopi di "visualizzazione" poiché i dati che vengono rappresentati graficamente sono dati salvati in memoria come vettore piuttosto che nella tabella dati come colonna. Puoi ancora fare alcune statistiche: ho incluso alcune statistiche come la media e 1 std dev come un ovale attorno alla media. Ma sarai limitato con alcune cose a causa di ciò che ho menzionato prima. Non puoi fare un'ellisse di densità su questo, per esempio (almeno non so come farlo).
Penso che dovresti essere in grado di generalizzare lo script per lavorare con tutte le fasi di test, i parametri e le parti che hai, in pratica dovresti semplicemente scorrere la tabella per salvare tutti i vettori in memoria e quindi forse avere una finestra popup (tramite Expr() ) per consentire all'utente di selezionare le fasi del test che desidera esaminare.
Produzione:

Sceneggiatura:
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" );
Spero che questo ti aiuti ad andare avanti!,
DS