Salut,
J'utilise un script parmi les suivants Publier pour essayer de développer la carte thermique créée à partir du script. Le script dans sa forme actuelle fait une carte thermique pour toutes les colonnes ensemble, mais je voudrais une colonne distincte de carte thermique PER. En d'autres termes, je voudrais trouver le min, le milieu et le max pour une certaine colonne, puis appliquer une carte thermique uniquement sur cette colonne, puis faire la même chose pour la colonne suivante et continuer.
Ci-joint les éléments suivants
1. sample_base_table.jmp : il s'agit d'un ensemble d'échantillons de données extrait.
2. extract_cols.jsl : c'est le script qui résume les données à utiliser pour le script heatmap
3. heatmap.jsl : ce script fait la heatmap pour les colonnes spécifiées
Questions:
Lorsque j'exécute extract_cols.jsl, j'obtiens 4 nouvelles tables de données nommées "Untitled X". Ensuite, lorsque j'exécute heatmap.jsl, il ne peut créer qu'une carte thermique pour la dernière table Untitled X créée. Je ne comprends pas pourquoi c'est... Quand je regarde le code du débogueur, il dit "Impossible de trouver la colonne dans l'accès ou l'évaluation de 'Colonne'". Cependant, j'imprime la colonne utilisée "Median(Values, Mango)" et elle s'affiche donc je ne suis pas sûr de ce qui se passe (voir l'image de sortie ci-dessous).

Améliorations/Travaux futurs :
Idéalement, après avoir pu comprendre pourquoi seule la dernière table de données créée est mise à jour, j'aimerais concaténer toutes ces 4 colonnes de cartes thermiques de fruits dans une table de données contenant également les informations sur les pays et les fruits. En d'autres termes, je génère 4 tables (32x3) et j'aimerais générer 1 table (6x32) (carte thermique des fruits + colonne des pays + colonne des emplacements). Actuellement, j'utilise JMP Query Builder pour effectuer la concaténation des colonnes.
vous spécifiez
Names Default To Here( 1 );
qui crée un espace de noms de mémoire séparé pour ce script spécifique.C'est-à-dire que dans votre script extract_cols, il y a une liste nommée "fruit".Si dans votre script heatmap vous avez spécifié
myFruit = fruit[1];
votre script heatmap ne saurait rien de votre variable appelée fruit.
Dans votre script de carte thermique, vous définissez la variable "dt" égale à la table de données actuelle.À partir de votre description, vous exécutez le script headmap juste après avoir exécuté le script extract_cols.À un moment donné dans JMP, il n'y a qu'une seule table de données qui est la table de données active actuelle.Par conséquent, lorsque vous spécifiez
dt = Current Data Table();
le script heatmap obtient la table de données active actuelle, qui serait la dernière table de données que vous avez créée dans le script extract_cols
Si vous devez transmettre la référence de table de données d'origine au deuxième script, et éventuellement aux 4 autres références de table de données, une façon de le faire est de créer un espace de noms distinct et de placer les références dans cet espace de noms.Voici une modification de votre script qui crée l'espace de noms et y place les références de la table de données.
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
);
Ensuite, vous pouvez référencer l'espace de noms dans votre script de carte thermique pour obtenir la référence de table principale ou l'une des références de table de données qui ont été enregistrées dans l'espace de noms.
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
)
);
);
);
Merci pour l'entrée!
Lorsque j'exécute le script extract_cols mis à jour que vous avez fourni, je reçois le message d'erreur suivant ci-dessous concernant l'accès à la valeur L ...

mon erreur, change
insert into(theList,dt);
à
insert into(trans:theList,dt);
theList n'existe pas......mais trans:theList existe