Hola,
Estoy usando un script de los siguientes correo para intentar expandir el mapa de calor que se crea a partir del script. El script en su forma actual hace un mapa de calor para todas las columnas juntas, pero me gustaría tener un mapa de calor separado POR columna. En otras palabras, me gustaría encontrar el mínimo, el medio y el máximo para una determinada columna, luego aplicar un mapa de calor solo en esa columna, luego hacer lo mismo para la siguiente columna y continuar.
Se adjuntan los siguientes
1. sample_base_table.jmp: este es un conjunto de datos de muestra del que se está extrayendo.
2. extract_cols.jsl: este es el script que resume los datos que se utilizarán para el script del mapa de calor
3. heatmap.jsl: este script hace el mapa de calor para las columnas especificadas
Asuntos:
Cuando ejecuto extract_cols.jsl, obtengo 4 tablas de datos nuevas llamadas "Sin título X". Luego, cuando ejecuto heatmap.jsl, solo puede crear un mapa de calor para la última tabla Untitled X creada. no entiendo porque es esto... Cuando miro el código del depurador, dice "no se pudo encontrar la columna en el acceso o la evaluación de 'Columna'". Sin embargo, imprimo la columna que se usa "Mediana (Valores, Mango)" y aparece, así que no estoy seguro de lo que está sucediendo (vea la imagen de salida a continuación).

Mejoras/Trabajo Futuro:
Idealmente, después de que pueda averiguar por qué solo se actualiza la última tabla de datos creada, me gustaría concatenar todas estas 4 columnas de mapa de calor de frutas en una tabla de datos que también contenga la información de países y frutas. En otras palabras, estoy generando 4 tablas (32x3) y me gustaría generar 1 tabla (6x32) (mapa de calor de 4 frutas + columna de países + columna de ubicaciones). Actualmente, lo que estoy haciendo es con JMP Query Builder para hacer la concatenación de columnas.
Si pasa el cursor sobre trans:theList o si especifica
show(trans:theList);
en su secuencia de comandos le mostrará lo que está en la lista.Lo que verá son 5 entradas.el primero sera
Data Table( 'the name of your initial data table");
Cada entrada posterior será el puntero a la tabla de datos filtrada por Apple, luego Banana, luego Mango y finalmente Orange.
No contiene los datos, solo un puntero a ellos.Los nombres de las columnas, etc., se recuperan de la tabla de datos real.
Debe tomarse el tiempo para leer la Guía de secuencias de comandos disponible en la Biblioteca de documentación de JMP, en el menú desplegable Ayuda.
¡Gracias eso lo arregló!
Entonces, cuando ejecuto el script del mapa de calor, aparece el siguiente mensaje. cuando cambio
dt= trans:thelist[5]
funciona pero nuevamente solo para la última tabla de datos creada. Además, este concepto de espacio de nombres es nuevo para mí. Permítanme intentar resumir lo que esto está haciendo y ¿pueden confirmar si mi comprensión es correcta? Entonces, al usar el espacio de nombres en la secuencia de comandos, podemos guardar todos los nombres de la tabla de datos (y, lo que es más importante, los nombres de las columnas y el valor de esa tabla de datos) en una lista trans que luego llamamos en la secuencia de comandos del mapa de calor.

mi error, cambio
insert into(theList,dt);
a
insert into(trans:theList,dt);
theList no existe... pero trans:theList sí
¡Gracias por el aporte!
Cuando ejecuto el script extract_cols actualizado que proporcionó, aparece el siguiente mensaje de error a continuación sobre el acceso al valor L...

estas especificando
Names Default To Here( 1 );
que crea un espacio de nombres de memoria separado para ese script específico.Es decir, en su script extract_cols, hay una lista llamada "fruta".Si en su script de mapa de calor especificó
myFruit = fruit[1];
su secuencia de comandos de mapa de calor no sabría nada sobre su variable llamada fruta.
En su secuencia de comandos de mapa de calor, establece la variable "dt" igual a la tabla de datos actual.Según su descripción, está ejecutando la secuencia de comandos headmap justo después de ejecutar la secuencia de comandos extract_cols.En un momento dado en JMP, solo hay 1 tabla de datos que es la tabla de datos activa actual.Por lo tanto, cuando especifica
dt = Current Data Table();
el script de mapa de calor obtiene la tabla de datos activa actual, que sería la última tabla de datos que creó en el script extract_cols
Si necesita pasar la referencia de la tabla de datos original al segundo script, y posiblemente las otras 4 referencias de la tabla de datos, una forma de hacerlo es crear un espacio de nombres separado y colocar las referencias en ese espacio de nombres.Aquí hay una modificación a su secuencia de comandos que crea el espacio de nombres y coloca las referencias de la tabla de datos en él.
Names Default To Here( 1 );
Clear Symbols();
dt = Current Data Table();
if(isnamespace("trans")==0, trans = new namespace("trans"));
trans:theList = {};
insert into(theList,dt);
fruit = {"Apple","Banana","Mango","Orange"};
For(i = 1, i <= N Items(fruit), i++,
obj = dt << Tabulate(
Set Format( Uniform Format( 10, 0 ) ),
Add Table(
Column Table(
Statistics( Median ),
Grouping Columns( :fruits ),
Analysis Columns( :Values )
),
Row Table( Grouping Columns( :Countries, :locations ) )
),
Local Data Filter(
Add Filter(
columns( :fruits),
Where( :fruits == fruit[i] ),
Display( :fruits, N Items( 14 ) )
)
)
);
trans:theList[i+1] = obj<< make into data table;
Current Report() << Close Window
);
Luego, puede hacer referencia al espacio de nombres en su script de mapa de calor para obtener la referencia de la tabla principal o cualquiera de las referencias de la tabla de datos que se guardaron en el espacio de nombres.
Names Default To Here( 1 );
Clear Symbols();
dt = trans:thelist[1];
dt << Begin Data Update;
///////////////////////////////////
// Setting Variables for script ///
//rev_scale = "Reverse Scale";
rev_scale =0;
mean_median = 1; //mean=0, median=1
print(mean_median);
///////////////////////////////////
//gets all columns that are continous and stores that in a list as strings.
colList = dt << get column names( continuous, string );
print(colList);
// Create a temporary subset where the columns are the column list, selects all rows,
// invisible makes it so you don't see the datatable on screen since it is temporary
dtsub = dt << subset(columns(colList), selected rows(0),invisible);
// Move the data into a matrix this will be used later to get min, max, median|mean
allData = dtsub << get as matrix;
// Close the no longer needed temporary data table
close(dtsub, nosave);
// Calculate the statistics across the full data matrix
myMax = Maximum(allData);
myMin = Minimum(allData);
if(mean_median == 0,
myMid = Mean(allData),
myMid = Median(allData)
);
print(myMax);
print(myMin);
print(myMid);
print(colList);
// Run for loop over data table with the min, max and median|mean calculated from above
// gradient color scheme needs to be set.
if(rev_scale == 1,
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Column( __col__ ) <<
set property(
"color gradient",
{"Green Yellow Red",
Range( {__Max__, __Min__, __Mid__} ),"Reverse Scale"}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);
,
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Column( __col__ ) <<
//Column( colList[i] ) <<
set property(
"color gradient",
{"Green Yellow Red",
Range( {__Max__, __Min__, __Mid__} )}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);
);