Ho guardato un video in onda e ho provato a creare un grafico di controllo che includesse le linee verticali e i commenti (annotazioni). Ho le battute ma i commenti sono tutti confusi. Ho provato molte cose ma senza successo. Puoi vedere il file allegato, il codice e fammi sapere qual è il problema?
@Sebnem ,
Ho usato il tuo copione. Ci sono 2 problemi principali. Il grafico di controllo JMP utilizza la sequenza per l'asse X e TestDate viene utilizzato per definire le etichette. Quindi la posizione x della tua etichetta dovrebbe essere Row () - 1, come la linea verticale. Ho commentato Giustificato a destra e ho usato meno 0,75 per far sì che l'etichetta fosse appena a destra della linea verticale. Rimuovere il commento su Giustificato a destra e impostarlo su Riga () - 1 affinché le etichette appaiano a sinistra della linea verticale.
Il secondo errore è la posizione y. Il tuo fattore di moltiplicazione di 1.2 * Col Maximum (: Avg) è> 1500. Ho aggiunto un valore fittizio, potresti prendere in considerazione Col Max (: Avg) +0.10 * Col Std Dev (: Avg).
Quindi i tuoi problemi erano xey pos. Questo è un metodo semplice per aggiungere commenti utilizzando le informazioni sulla colonna. Tuttavia, questo è solo come registro in quanto la tabella è aperta.
Si supponga di registrare il grafico risultante, chiudere la tabella dei dati e il report del grafico di controllo e apportare qualsiasi aggiornamento come la modifica della larghezza della linea dei limiti di controllo. scompaiono sia le righe che i commenti. Oppure, se salvi il diario e lo invii a un altro o lo apri in una nuova sessione, di nuovo le etichette e le righe sono sparite.
Per mantenere quelle righe e il testo, è necessario utilizzare i valori e non i riferimenti alla tabella dati. Aggiungerò un secondo script che utilizza valori e riferimenti. Ma questo dovrebbe mostrare cosa è andato storto con il tuo script.
Control Chart(
Sample Label( :TestDate ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Avg, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Avg"},
"IR Chart of IM",
FrameBox,
{Add Graphics Script( 2, Description( "Script" ), Empty() ),
Add Graphics Script(
3,
Description( "Script" ),
For Each Row(
If( Is Missing( :comment ) == 0,
V Line( Row() - 1 )
)
);
For Each Row(
If( Is Missing( :comment ) == 0,
Text(
//Right Justified,
{Row()-0.75, Col Maximum( :Avg )+ 1.005},
:Comment
)
)
);
), Grid Line Order( 5 ), Reference Line Order( 6 )}
)
)
);
@Sebnem ,
Esistono più metodi per creare lo script (espressione) che ha i valori incorporati per la linea verticale e il testo, non riferimenti a righe e colonne,
Le funzioni JSL per le espressioni [Substitute (), NameExpr (), EvalExpr (), Expr ()] e le funzioni di caratteri JSL che convertono il testo in espressioni JSL [Concat (), ConcatTo (), Eval Insert () e Parse] sono buone per imparare.
cc= Control Chart(
Sample Label( :TestDate ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Avg, Individual Measurement )
);
rcc = report(cc);
scrp = Expr(Add Graphics Script(3,
Description( "PM Labels" )));
//get y placement = axis max - 0.5* axis inc
ypos = (rcc[AxisBox(1)]<< Get Max) - 0.5* (rcc[AxisBox(1)] << Get Inc);
txtcmd = "";
For Each Row(
If( Is Missing( :comment ) == 0,
txtcmd ||= EvalInsert("\[
V Line( ^Row() -1^ );
Text(
//Right Justified,
{ ^Row() - .75^, ^ypos^},
"^:comment(Row())^");]\")
)//end if
); //end for each row
show (txtcmd ); //see log
InsertInto(scrp, Parse(txtcmd));
show (scrp ); //see log
txtxp = Substitute(Expr(rcc[FrameBox(1)] << cmd), Expr(cmd), NameExpr(scrp));
Show(NameExpr(txtxp));
Eval(txtxp);
Nota, invece di usare For Each Row (), un idx = dt << get rows dove (! Is Missing (: comment)) potrebbe essere usato per trovare l'elenco più piccolo di righe con commenti.

@ gzmorgan0
Funziona come un campione!
Grazie!