Ho un codice "sample.jsl" che ha un ciclo per creare un grafico bi-var per ogni colonna. Sto cercando di aggiungere una casella di scorrimento dell'intervallo a questo ciclo in modo che, una volta eseguito lo script, crei un grafico per tutte le colonne con una casella di scorrimento dell'intervallo separata per ogni grafico.
I limiti per tutte le colonne dell'asse x sono in "limits.jmp" e il file di dati è "Data.jmp". Il codice "sample.jsl" crea un grafico ciascuno per tutti i parametri contemporaneamente. Voglio modificare il codice in modo che aggiunga anche una casella di scorrimento dell'intervallo a tutti i grafici.
La casella del dispositivo di scorrimento dell'intervallo dovrebbe avere i limiti di controllo superiori (ucl) e lcl come i due dispositivi di scorrimento dinamici.
Ho questo codice che crea la casella di scorrimento dell'intervallo ma funziona solo per un singolo grafico. Ho bisogno di uno script che crei tutti i grafici insieme alle caselle di scorrimento della gamma dinamica.
Qualsiasi aiuto sarebbe apprezzato. grazie in anticipo
myFinalDisplay = expr(
myLimitCol = column(dt, "ColA"); //new
myLimitMin = colMinimum(myLimitCol); show(myLimitMin); //new
myLimitMax = colMaximum(myLimitCol); show(myLimitMax); //new
mylcl = globalLCL["ColA];
myucl = globalUCL["ColA];
myGbDispObj = dt << Bivariate(
Size( 550, 400 ),
Y( "res" ),
X( "ColA" ),
Automatic Recalc( 1 ),
Histogram Borders( 1 ),
Summary Statistics( 1 ),
Fit Spline( 2, {Line Color( {212, 73, 88} )} ),
SendToReport(
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Row Legend(
"Grouping",
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 1 ),
Marker Theme( "Solid" ),
Continuous Scale( 1 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
),
Dispatch(
{},
"1",
ScaleBox,
{Add Ref Line({mylcl, myucl}, "Solid", "Light YellowGreen", "", 1, 0.20 )}
),
Dispatch( {}, "Summary Statistics", OutlineBox, {Close( 1 )} )
)
);
myTbLo = textBox(Char(round(myLimitMin, 2)) || " (OOC = " || char(0.00, 10, 2) || "%)");
myTbHi = textBox(Char(round(myLimitMax, 2)) || " (OOC = " || char(0.00, 10, 2) || "%)");
mySbDispObj = rangeSliderBox();
mySbDispObj = rangeSliderBox(
myLimitMin,
myLimitMax,
mylcl,
myucl,
//script
mySelectedLower = mySbDispObj << getLower;
mySelectedUpper = mySbDispObj << getUpper;
myGbDispObj << Dispatch( {}, "1", ScaleBox, {Add Ref Line( mySelectedLower, "Dashed", "blue", "LCL", 4 )} );
myGbDispObj << Dispatch( {}, "1", ScaleBox, {Add Ref Line( mySelectedUpper, "Dashed", "blue", "UCL", 4 )} );
rUpper = dt << Get Rows Where( myLimitCol[] > mySelectedUpper );
OOC_valUpper = (N Items(rUpper) / Col Number( Column(dt, "ColA") ))*100;
myTbHi << setText(Char(round(mySelectedUpper, 1)) || " (OOC = " || char(OOC_valUpper, 10, 2) || "%)");
rLower = dt << Get Rows Where( myLimitCol[] < mySelectedLower );
OOC_valLower = (N Items(rLower) / Col Number( Column(dt, "ColA") ))*100;
myTbLo << setText(Char(round(mySelectedLower, 1)) || " (OOC = " || char(OOC_valLower, 10, 2) || "%)");
);
mySbDispObj << Set Width( 275 );
myLayout = vListBox(
myGbDispObj,
hListBox(myTbLo, spacerBox(size(50,0)), myTbHi),
mySbDispObj
);
);@pmroz
@txnelson
Grazie per averlo spiegato.
Sì, ho esperienza in Python e nuovo in jsl. Imparare in movimento.
mi sembra abbastanza chiaro
OP, questo può essere fatto relativamente facilmente, ma non credo che molte persone vorranno aiutarti in questo perché stai chiedendo troppo e sembri essere troppo inesperto per capire davvero tutto.
Alcune cose da esaminare mentre stai compilando il tuo livello di esperienza qui sono le seguenti
- JSL in realtà non esegue molto il controllo automatico dell'ambito - in particolare, non ricorda gli stati e le gerarchie dell'ambito per funzioni e simili - se sei abituato a Python, ad esempio, allora JSL sarà piuttosto frustrante e ti renderà fantastico dolori fino a quando non interiorizzi questo e inizi a fare tutto il tuo controllo dell'oscilloscopio
- Per multipli interattivo e per lo più elementi identici (come grafici con caselle di scorrimento, dove cambiano solo il grafico X/Y / Raggruppamento), le espressioni non ti serviranno bene.Usa invece un generatore di funzioni o qualcosa del genere poiché ti servirà per distinguere le caselle di scorrimento e a quale oggetto si collegano.Ovviamente questo può essere fatto con le espressioni, ma in generale è la configurazione più complicata con solo guadagni di velocità trascurabili nella maggior parte dei casi
- Inizia in piccolo, con un solo grafico e un rangeSliderBox.Scopri come collegarli utilizzando l'ambito esplicito
- Avrai bisogno di una tabella di dati separata per ogni grafico poiché una tabella può avere solo uno stato di riga per riga
- Con questo, se crei più sottotabelle per ogni grafico, sarebbe meglio renderle invisibili per evitare che l'utente venga inondato di tabelle di dati.Ma tieni presente quella tabella dei dati non vengono mai eliminati implicitamente da JMP .È necessario collegare la chiusura della finestra alla pulizia dello script: chiudere tutte le tabelle di dati pertinenti ed eliminare eventuali spazi dei nomi utilizzati per l'ambito.
- Molte persone sulle pagine della community qui sono disposte ad aiutare, ma le domande dovrebbero essere piccole e succinte.
Ecco un esempio di ciò che interessa alcune linee di riferimento con una casella di scorrimento per ogni elenco. Non elimina la riga di riferimento precedente, quindi dovresti capire come vuoi farlo se è quello che stai cercando.
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize(dt, ages = By(:age)); // just some list
nw = new window("Some box");
for(i=1, i<=nitems(ages), i++,
olb = outlinebox("Age = " || char(ages[i]),
hlistbox(
rsb = rangesliderbox(colmin(:height), colmax(:height), colquantile(:height, .25), colquantile(:height, .75)),
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
where(char(:age) == ages[i])
);
)
);
(gb<<PARENT></PARENT>I grafici funzionano bene e si aggiungono alla nuova finestra. Ma non sono in grado di aggiungere un oggetto range slider box() a ciascuno dei grafici creati usando il loop;.
Potresti provare a creare prima una finestra con una casella di riepilogo vuota in cui desideri inserire i grafici, quindi aggiungere i tuoi grafici a tale casella di riepilogo utilizzando un ciclo for.
Penso che il messaggio che hai postato non venga visualizzato?