Inserimento del nome di una colonna selezionata in una formulaRi: Inserimento del nome di una colonna selezionata in una formulaCIAO gzmorgan0 ,
questa è una sceneggiatura fantastica. Come deve essere modificato lo script per poter aggiungere altri pulsanti formula, come Col Mean o Col Std Dev?
Ri: Inserimento del nome di una colonna selezionata in una formulaGzmorgan,
Sei un mago. Ho provato entrambi i metodi che hai illustrato con successo. Ancora più importante, ho imparato più tecniche di scripting. Grazie molto.Ri: Inserimento del nome di una colonna selezionata in una formulaInnanzitutto un paio di note:
- oc è un riferimento a una colonna, la sintassi oc( Connect Points(1)) non può essere interpretata da JMP.
- Sembra che la sintassi mostrata nell'indice di scripting per il grafico sovrapposto richieda il nome della colonna, vedere l'esempio seguente. Accetterà anche :Name("Volume")(Connect Color (0) );
obj = Overlay Plot(
X( :Date ),
Y( :High, :Low, :Close, :Volume ),
Y Scale( Left, Left, Left, Right )
);
obj << Connect Points( 1 );
obj << :Volume( Connect Color( 0 ) );
obj << :Low( Connect Color( "Red" ) );
- Il grafico sovrapposto ha alcune caratteristiche interessanti, tuttavia, gli sviluppatori JMP probabilmente consiglierebbero di utilizzare il Costruttore di grafici. Per la struttura della tabella dati, Overlay potrebbe essere più semplice da utilizzare, quindi utilizzerò Overlay.
- Lo script seguente inizia con un sottoinsieme della tabella dati Calcio, nessuna delle colonne aggiunte. Quindi calcola la media mobile. Lo script crea un grafico sovrapposto e utilizza Eval(Parse(EvalInsert())) per costruire la sintassi mostrata nell'indice di scripting con il nome tra virgolette e l'opzione per disattivare i punti.
- La seconda parte dello script illustra un metodo alternativo. Attiva linee e punti per tutte le colonne sovrapposte.Quindi utilizzare Xpath() per creare un elenco di riferimenti ai segmenti di linea e ai segmenti marcatore.Per disattivare una linea, imposta la larghezza della linea su 0. Per disattivare i punti, imposta la trasparenza su 0.Trovo che lavorare con i segmenti utilizzi una sintassi più semplice.Tuttavia, Xpath(), sebbene estremamente utile, è probabilmente considerato più avanzato.Spero che aiuti.
Names default to here(1);
dt = current data table();
colnme = "Speed";
oc = Column(dt, colnme);
nc = dt << New Column( colnme || " Moving Average",
Numeric,
Formula(Col Moving Average(oc[],1,4,16) )
);
ovp = Overlay Plot( Y(oc, nc));
ovp << Connect Thru Missing(1);
ncnme = nc << get name;
//The syntax is ovp << :col( opt1);
Eval( Parse(EvalInsert("ovp << :name(\!"^ncnme^\!")(Show Points(0))" ) ) ) ;
//alternate method
ovl = Overlay Plot( Y(oc, nc));
ovl << Connect Thru Missing(1);
lines = ovl << Xpath("//LineSeg");
points = ovl << Xpath("//MarkerSeg");
wait(2);
lines[1] << Line width(0); //turn off line 1
wait(2);
lines[1] << Line width(2); //turn on line 1
wait(2);
lines[1] << Line width(0); //turn off line 1
wait(2);
points[2] << Transparency(0); //turn off points 2
Ri: Inserimento del nome di una colonna selezionata in una formulaContinuo il mio sforzo. Ho fatto molti progressi.Ho inserito il nome di una colonna selezionata nella mia formula e ora posso creare un grafico sovrapposto della colonna selezionata con la sua media mobile utilizzando i parametri MA da una finestra di dialogo. Carino. Molto bello. Sto utilizzando la funzione "Overlay Plot". Posso modificare tutti i punti su entrambi i grafici, ma non riesco a capire come modificare solo uno degli attributi del grafico.
Ecco uno snippet di codice per illustrare. Funziona:
cn1 = colName || "";
cn2 = colName || " Moving Average";
dt << New Column( colName || " Moving Average",
Numeric,
Formula( Eval( Parse( formulaString ) ) )
);
oc = Column( cn1 );
nc = Column( cn2 );
nw2 << Close Window;
funny = Overlay Plot( Y( oc, nc ), );
funny << (Connect Points( 1 ));
Il grafico risultante ha sia il MA che i punti originali collegati.
Tuttavia, se cambio l'ultima riga per modificare solo uno dei grafici, ad esempio questo, non funziona:
funny << oc( Connect Points( 1 ) );
Nessun punto è collegato.
Quindi, "oc" è riconosciuto nella funzione "Overlay Plot" come una delle colonne Y, ma non è riconosciuto nell'istruzione precedente.
Qualcuno può aiutare per favore? È in gioco la mia salute mentale
Ho allegato una tabella dati con il mio intero script incorporato.C'è un piccolo script aggiuntivo generato automaticamente per realizzare la trama nel modo in cui vorrei che fosse l'intera sceneggiatura; Ho potuto realizzare questa trama solo modificando manualmente la legenda.
Kevin
Ri: Inserimento del nome di una colonna selezionata in una formulaOK. Lo farò.
Grazie mille,
Kevin
Ri: Inserimento del nome di una colonna selezionata in una formulaNessun problema. Ma userei il metodo di gz. È più robusto in quanto gestisce le colonne con caratteri speciali nel nome.
Ri: Inserimento del nome di una colonna selezionata in una formulaGrazie, GZ,
Sì, la tua soluzione ha funzionato anche per me. Il trapping se non è selezionata alcuna colonna è un buon consiglio. Lo userò in futuro.
Ri: Inserimento del nome di una colonna selezionata in una formulaGrazie, Mike,
Sì, ha funzionato davvero per me. E ho imparato qualche altra tecnica di scripting.
Ri: Inserimento del nome di una colonna selezionata in una formulaIl tuo script funzionerà solo se non sono presenti simboli speciali nei nomi delle colonne. Se esistono, il riferimento denominato deve essere :Name("string"). Inoltre, allo script è stato aggiunto un controllo della selezione di una colonna.
Names Default to Here(1);
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all, <<SET data="https://community.jmp.com/" type=""></SET>
Ri: Inserimento del nome di una colonna selezionata in una formula
Prova questo. Le ultime due righe della parte col list box() sembravano essere uno script, il che significa che avrebbero dovuto essere separate dal punto e virgola (o dalla colla).Il resto di queste righe sono argomenti della casella di riepilogo colonne, separati da virgole. La parte "colName = ... " della casella di riepilogo col è commentata qui perché non penso che stesse facendo molto. È meglio afferrarlo durante la parte della casella dei pulsanti dello script. Puoi aggiungere nuovamente la variabile table se lo desideri.
Sarebbe meglio fare in modo che la casella di riepilogo carichi solo colonne numeriche. Non riuscivo a ricordare come farlo correttamente. Attualmente carica tutto nella casella di riepilogo. Ho cambiato min/max col() in max selezionato. Cioè non più di 1 alla volta.
Per quanto riguarda la parte della formula, di solito mi ci vogliono un po' di tentativi ed errori per ottenere le stringhe dove le voglio. Sembra che funzioni
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all,//numeric,
//min col( 1 ),
max selected( 1 )//,
//colname = Eval Expr (Expr(x << get selected)[1])//,
//dt << New Table Variable( "Selected Column", (x << get selected)[1] )
),
Button Box( "Moving Average",
colName = Char( (x << get selected)[1] );
//myCol = column(colName);
formulaString = "Col Moving Average( :"|| char(colName) ||", 0, 4, 0 )";
dt << New Column( colName || " Movin Average",
Numeric,
//Formula( Col Moving Average( Name Expr(colname), 0, 4, 0 ) )
Formula( eval(parse(formulaString)) )
)
)
);
Ri: Inserimento del nome di una colonna selezionata in una formulaSto cercando di capire come inserire correttamente la selezione delle colonne da una finestra di dialogo in una formula. Ho guardato molte discussioni ed esempi dal libro di scripting, ho provato un sacco di cose. Nessun dado ancora. Come puoi vedere nello script, voglio selezionare una colonna e creare una nuova colonna in base alla formula della media mobile della colonna. Apprezzerei l'aiuto.
Ecco il mio ultimo tentativo:
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all,
min col( 1 ),
max col( 1 ),
colname = Eval Expr (Expr(x << get selected)[1]),
dt << New Table Variable( "Selected Column", (x << get selected)[1] )
),
Button Box( "Moving Average",
dt << New Column( Char( (x << get selected)[1] ) || " Movin Average",
Numeric,
Formula( Col Moving Average( Name Expr(colname), 0, 4, 0 ) )
)
)
);