Poner el nombre de una columna seleccionada en una fórmulaRe: Poner el nombre de una columna seleccionada en una fórmulaHola gzmorgan0 ,
Este es un gran guión. ¿Cómo se debe cambiar el script para agregar otros botones de fórmula, como Col Mean o Col Std Dev?
Re: Poner el nombre de una columna seleccionada en una fórmulagzmorgan,
Eres un mago. Probé ambos métodos que ilustraste con éxito. Más importante aún, aprendí más técnicas de secuencias de comandos. Muchas gracias.Re: Poner el nombre de una columna seleccionada en una fórmulaPrimero un par de notas:
- oc es una referencia de columna cuya sintaxis oc( Connect Points(1) ) no pudo ser interpretada por JMP.
- Parece que la sintaxis que se muestra en el índice de secuencias de comandos para el gráfico de superposición requiere el nombre de la columna; consulte el ejemplo a continuación. También aceptará :Name("Volumen")(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" ) );
- El gráfico superpuesto tiene algunas características interesantes; sin embargo, los desarrolladores de JMP probablemente recomendarían usar Graph Builder. Para la estructura de su tabla de datos, Overlay podría ser más fácil de usar, así que usaré Overlay.
- El siguiente script comenzó con un subconjunto de la tabla de datos de fútbol, ninguna de las ecolumnas que agregó. Luego calcula la media móvil. El script crea un gráfico superpuesto y utiliza Eval(Parse(EvalInsert())) para construir la sintaxis que se muestra en el índice de scripting con el nombre entre comillas y la opción para desactivar puntos.
- La segunda parte del guión demuestra un método alternativo. Active líneas y puntos para todas las columnas superpuestas.Luego use Xpath() para crear una lista de referencias a los segmentos de línea y los segmentos marcadores.Para desactivar una línea, establezca el ancho de línea en 0. Para desactivar puntos, establezca la transparencia en 0.Creo que trabajar con los segmentos utiliza una sintaxis más simple.Sin embargo, Xpath(), si bien es extremadamente útil, probablemente se considere más avanzado.Espero que ayude.
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
Re: Poner el nombre de una columna seleccionada en una fórmulaContinuando con mi esfuerzo. He progresado mucho.Puse un nombre de columna seleccionada en mi fórmula y ahora puedo hacer un gráfico superpuesto de la columna seleccionada con su media móvil usando parámetros MA desde un cuadro de diálogo. Lindo. Muy lindo. Estoy usando la función "Trazado de superposición". Puedo modificar todos los puntos en ambos gráficos, pero no sé cómo modificar solo uno de los atributos del gráfico.
Aquí hay un fragmento de código para ilustrar. Esto funciona:
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 ));
El gráfico resultante tiene conectados tanto el punto MA como el original.
Sin embargo, si cambio la última línea para modificar solo uno de los gráficos, digamos esto, no funciona:
funny << oc( Connect Points( 1 ) );
No hay puntos conectados.
Por lo tanto, "oc" se reconoce en la función "Gráfico de superposición" como una de las columnas Y, pero no se reconoce en la declaración anterior.
¿Puede alguien ayudar, por favor? Mi salud mental está en juego.
Adjunté una tabla de datos con todo mi script incrustado.Hay un pequeño guión adicional generado automáticamente para hacer la trama como me gustaría que fuera el guión completo; Sólo pude hacer este gráfico cambiando manualmente la leyenda.
kevin
Re: Poner el nombre de una columna seleccionada en una fórmulaDE ACUERDO. Lo haré.
Gracias un montón,
kevin
Re: Poner el nombre de una columna seleccionada en una fórmulaNingún problema. Pero yo usaría el método de gz. Es más robusto porque maneja columnas con caracteres especiales en el nombre.
Re: Poner el nombre de una columna seleccionada en una fórmulaGracias GZ
Sí, tu solución también funcionó para mí. Trazar si no se selecciona ninguna columna es un buen consejo. Lo usaré en el futuro.
Re: Poner el nombre de una columna seleccionada en una fórmulaGracias mike,
Sí, efectivamente funcionó para mí. Y aprendí más técnicas de secuencias de comandos.
Re: Poner el nombre de una columna seleccionada en una fórmulaSu script funcionará sólo si no hay símbolos especiales en los nombres de sus columnas. Si los hay, entonces la referencia nombrada debe ser: Nombre ("cadena"). Además, se agregó al script una verificación de que se seleccionó una columna.
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>
Re: Poner el nombre de una columna seleccionada en una fórmula
Prueba esto. Las dos últimas líneas de la parte col list box() parecían ser un script, lo que significa que deberían haber estado separadas por punto y coma (o pegamento).El resto de esas líneas son argumentos del cuadro de lista col, separados por comas. La parte "colName = ..." del cuadro de lista col está comentada aquí porque no creo que estuviera haciendo mucho. Es mejor tomarlo durante la parte del cuadro de botones del guión. Puede volver a agregar la variable de la tabla si lo desea.
Sería mejor hacer que el cuadro de lista cargue solo columnas numéricas. No recordaba cómo hacerlo correctamente. Actualmente carga todo en el cuadro de lista. Cambié min/max col() a max seleccionado. Es decir, no más de 1 a la vez.
En cuanto a la parte de la fórmula, normalmente me lleva un poco de prueba y error conseguir que las cadenas estén donde quiero. Esto parece funcionar.
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)) )
)
)
);
Re: Poner el nombre de una columna seleccionada en una fórmulaEstoy tratando de descubrir cómo convertir correctamente la selección de mi columna de un cuadro de diálogo en una fórmula. Miré muchas discusiones y muestras del libro de guiones, probé muchas cosas. Aún no hay dados. Como puede ver en el script, quiero seleccionar una columna y crear una nueva columna basada en la fórmula de promedio móvil de la columna. Agradecería ayuda.
Aquí está mi último intento:
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 ) )
)
)
);