Celdas de color basadas en el resultado de la fórmulaHola a todos,
Tengo una columna (llamémosla Indicador) con una fórmula que devuelve un 0 o un 1.
Ahora mismo sé cómo hacer esto:
formulaResult = :Indicator << Get Values;
:Indicator << Color Cells( "red", Loc(formulaResult==1) );
Pero lo que realmente quiero hacer es que la tabla de datos responda dinámicamente: si cambio los datos para que el Indicador cambie a 0 (falso), no quiero que la celda se resalte más, y si agrego más datos a la tabla y la fórmula calcula, quiero que se resalten los 1.
No puedo entender cómo hacer esto con Color Cells. Pensé que tal vez una implementación extraña de la propiedad de la columna Color Gradient podría funcionar, pero después de jugar con eso por un tiempo, no pude obtener el resultado que quería. Buscando algunas ideas.
Miguel
Re: Celdas de color basadas en el resultado de la fórmulaAquí está el mismo enfoque con un color blanco Demás cláusula. La columna oculta aquí es numérica de forma predeterminada, por lo que tanto Entonces como Else deben devolver algo numérico, por ejemplo, un valor faltante.
dt = Open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("highlight cells",
Formula(If(100 < :weight < 135, :weight << color cells("Red", Row()); .,
:weight << color cells("White", Row()); .)),
Hide(1)
);
Re: Celdas de color basadas en el resultado de la fórmulaEste enfoque funciona para mí a menos que cambie los pesos. Pensé que podría simplemente agregar una solicitud para establecer el parámetro else en la instrucción If() a Color Cells("White",Row()) pero eso no parece funcionar.
También requiere una nueva columna para cada parámetro que tenga límites de especificación, aunque supongo que podríamos escribir una fórmula creativa que itere a través de todas las columnas, verifique una propiedad de columna de Límites de especificación y, si encuentra una, coloree las columnas apropiadas. ? Al menos las columnas adicionales están ocultas.
Re: Celdas de color basadas en el resultado de la fórmulaTal vez no sea obvio, pero puede encontrar este enfoque menos "torpe":
Names Default To Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("highlight cells",
Formula(If(100 < :weight < 135, :weight << color cells("Red", Row()); ., .)),
Hide(1)
);Re: Celdas de color basadas en el resultado de la fórmulaTotalmente de acuerdo.Definitivamente, debe realizar una solicitud de función para eso en support@jmp.com.
Re: Celdas de color basadas en el resultado de la fórmulaEsto es torpe, y debería haber una forma más directa/obvia de hacerlo en JMP, pero esta solución puede funcionar. Gracias.
Re: Celdas de color basadas en el resultado de la fórmulaBásicamente, solo estoy fingiendo un degradado de color que se degrada sobre una pequeña ventana.Entonces, para solo dos colores, solo necesita 4 puntos. 0, algún número muy cercano a 0, algún número muy cercano a 1 y 1. Si quisiera más de 2 colores, tendría que calcular valores de 0 a 1 en cada punto de su rango que quisiera.por ejemplo, si quisiera 110, tendría que agregar dos valores en 10/35 y 10/35+.0000001
Names Default to Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
Column(dt, "weight") << Set Property(
"Color Gradient" ,
{{"Something", 16387,
{{255, 0, 0}, {0, 255, 0}, {0, 255, 0}, {255, 0, 0}}, //list of colors
{0, .00000001, .9999999, 1}}, //corresponding locations from 0 to 1
Range( {100, 135, 117.5} ) //minimum, maximum and center. 0, 1, and .5 is another way to look at it
}
);
Column(dt, "weight") << Color Cell By Value(1);
Re: Celdas de color basadas en el resultado de la fórmulaLo siento. Esta solución no me permite colorear valores fuera de un rango de interés con un color (digamos, rojo) y dentro del rango de interés con un color diferente (digamos, blanco). Esta solución col min, col mean, col max parece ser una forma de simplemente poner algunos valores predeterminados para hacer un gradiente. ¿Qué tenía de atractivo @vince_faller La solución de es que crea un degradado personalizado que fuerza exactamente dos colores (creo) en la columna. Lo que aún no me atrae es que no entiendo cómo controlar con precisión cuándo cambio de mi color "bueno" a mi color "malo".
Re: Celdas de color basadas en el resultado de la fórmulaPuedes hacer los cálculos con colmin, colmax y colmean:
frr_min = col min(:FRR);
frr_max = col max(:FRR);
frr_avg = col mean(:FRR);
// Color FRR with a gradient
column(hlt_dt, "FRR") << Set Property( "Color Gradient", {"Light Spectral", Range(expr(frr_min), expr(frr_max), expr(frr_avg))});
column(hlt_dt, "FRR") << color cell by value(1);Re: Celdas de color basadas en el resultado de la fórmulaEsto está más cerca. Parece que el rango verde es de aprox. 92-127 para este ejemplo. Supongamos que mi rango de especificaciones es 100-135. ¿Cómo hago los cálculos para averiguar los puntos finales para alimentar la función Rango en Gradiente de color? (Y luego tengo el problema de tener que explicar a otros usuarios de JMP aquí por qué necesitan convertir dos números, es decir, 100 y 135, en tres valores para satisfacer la función de rango).
Re: Celdas de color basadas en el resultado de la fórmula¿Por qué no funciona el degradado de color?
Names Default to Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
Column(dt, "weight") << Set Property(
"Color Gradient" ,
{{"Something", 16387, {{255, 0, 0}, {255, 0, 0}, {0, 255, 0}, {0, 255,
0}, {255, 0, 0}, {255, 0, 0}}, {0, 0.33333333, 0.33333334,
0.666666666666, 0.666666666667, 1}}, Range( {64, 172, 105} )
}
);
Column(dt, "weight") << Color Cell By Value(1);

Re: Celdas de color basadas en el resultado de la fórmulaEste problema ya vuelve a surgir para mí solo una semana después.
La nueva aplicación es que tenemos una serie de situaciones en las que queremos marcar valores que están fuera de especificación. Ni el gradiente de color ni los colores de valor hacen un gran trabajo en esto. Sin duda, podemos crear una nueva columna y color en función de 0 frente a 1, pero si tengo varias variables con especificaciones que aplicar, tendré que crear una nueva columna para cada variable. ¡Esto se volverá difícil de manejar rápidamente! Me gustaría una mejor solución.
Re: Celdas de color basadas en el resultado de la fórmulaPara contar defectos puedo trabajar con esto. A veces también tengo variables continuas con las que necesito trabajar y esta solución no funcionará allí, pero tal vez el degradado de color funcione bien en esa situación.
Re: Celdas de color basadas en el resultado de la fórmulaHaga una lista que defina los colores de valor de la manera que necesite, por ejemplo, blanco para 0 y rojo para números enteros > 0. La propiedad Value Colors parece requerir que cada valor a colorear tenga su propia "asignación". Por lo tanto, todos los valores posibles de "Defectos" deben incluirse en la lista.
Ejemplo:
// Make list that defines the Value Colors
n = 10; //set highest conceivable nr of defects
vc = {0 = 2}; // White cell color for no defects
For(i = 1, i <= n, i++,
Insert Into(vc, Eval Expr(Expr(i) = 19)) // red for defects 0
);
// Example table
dt = New Table("test",
Add Rows(50),
New Column("Defects", Formula(Random Integer(0, 3)), Set Property("Value Colors", vc), Color Cell by Value)
);
Re: Celdas de color basadas en el resultado de la fórmulaMarca,
Por supuesto. Tiene sentido que pudiera crear otra columna indicadora. El único problema es que esto coloreará las celdas en la columna del indicador en lugar de resaltar la cantidad de defectos, así:

Lo que prefiero es esto:

¿Algunas ideas?
Re: Celdas de color basadas en el resultado de la fórmulaSolo necesita cambiar la lógica utilizada en la fórmula de la columna, por ejemplo, :datos > 0.Re: Celdas de color basadas en el resultado de la fórmula¡Impresionante! Creo que simplifiqué un poco mi problema. Probemos esta generalización.
Ahora mi Indicador ahora es un conteo de defectos (0, 1, 2, 3, 4, etc.). ¿Cómo puedo colorear todo> = 1 con el mismo color y no colorear los ceros?
Re: Celdas de color basadas en el resultado de la fórmulaPruebe la propiedad "Colores de valor" con "Color de celdas por valor" marcada.
Ejemplo:
// Example table
dt = New Table("test",
Add Rows(10),
New Column("data", Formula(Random Uniform())),
New Column("Indicator",
Set Property("Value Colors", {. = -12632256}),
Formula(:data < 0.5),
Color Cell by Value
)
);
// Test if dynamic
Wait(1);
:data << eval formula;
Wait(1);
dt << add rows(10);