Come ottenere la mappa di calore con la colorazione categorica
Ciao,
Sto creando mappe di calore con la colorazione di valori numerici. Ma non sono in grado di colorare in base a valori di stringa discreti.
Nel datatable allegato, provo a creare una heatmap colorata da diversi dispositivi: mi aspettavo di vedere una mappa con un colore specifico per ogni dispositivo. Ma ottengo una colorazione sfumata.
Come posso cambiarlo per ottenere un colr discreto specifico per ogni dispositivo?
Re: Come ottenere una mappa di calore con la colorazione categoricaÈ proprio quello che stavo cercando!!!!!!
Immagino che dovrò aspettare fino a settembre 2019 
Userò i workaround nel frattempo
Grazie a tutti.
Re: Come ottenere una mappa di calore con la colorazione categoricaCiao @samir ,
Capisco sicuramente la frustrazione! Voglio che tu sappia che anche gli sviluppatori che lavorano su Graph Builder capiscono questa frustrazione. Giusto per rivedere, JMP 14 (e precedenti) genera una scala quantitativa per i valori della tua variabile categoriale e usa la mappa di quei colori (e le medie di quei colori) quando popola le celle della mappa termica. JMP 15 (in arrivo a settembre 2019) si comporterà in modo diverso: le variabili nominali e ordinali utilizzate nel ruolo del colore di una mappa termica verranno trattate in modo categorico, con il controllo del colore individuale per ogni livello della variabile categoriale. Quando ci sono più valori che occupano una cella della mappa termica e quelle righe hanno livelli diversi di quella variabile categoriale, il colore della cella rifletterà la media dei colori designati.
Ecco un fianco a fianco di 14 (e precedenti) e un'anteprima del comportamento in 15:
@giuliano
Re: Come ottenere una mappa di calore con la colorazione categoricaUn modo per ottenere ciò che desideri è generare la wafermap utilizzando la grafica JMP.

Ecco il semplice JSL che lo fa
Names Default To Here( 1 );
dt = Current Data Table();
xrange = Col Max( :x ) - Col Min( :x );
yrange = Col Max( :y ) - Col Min( :y );
If(
xrange < yrange,
xsize = 1;
ysize = yrange / xrange;,
ysize = 1, xsize = xrange / yrange
);
Summarize( dt, devicesList = By( :Device ) );
colorList = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
xMatrix = [0, 0, 0, 0];
yMatrix = [0, 0, 0, 0];
New Window( "Wafer Map",
Graph Box(
Y Scale( Col Min( :Y ), ySize * Col Max( :Y ) ),
X Scale( Col Min( :X ), xSize * Col Max( :X ) ),
For( i = 1, i <= N Rows( dt ), i++,
xMatrix[1] = xSize * :X[i];
yMatrix[1] = ySize * :Y[i];
xMatrix[2] = xMatrix[1];
yMatrix[2] = YMatrix[1] + ySize;
xMatrix[3] = xMatrix[1] + xSize;
yMatrix[3] = YMatrix[1] + ySize;
xMatrix[4] = xMatrix[1] + xSize;
yMatrix[4] = YMatrix[1];
color = colorList[Loc( devicesList, :Device[i] )[1]];
Fill Color( color );
Polygon( xMatrix, yMatrix );
)
)
)
;Re: Come ottenere una mappa di calore con la colorazione categoricaCiao @giuliano ,
Prima di tutto, sono deluso nel vedere che questa è una VERA limitazione in JMP.
Il tuo lavoro è un passo avanti, ma non posso usare questa implementazione: è difficile con il grafico a dispersione controllare la dimensione dei punti (quadrati) e come hai mostrato che ci sono spazi tra i quadrati che danno l'impressione che ci siano dispositivi vuoti tra quelli colorati,...
Tutto sommato devo trovare un altro modo 
Grazie per il consiglio.
Re: Come ottenere una mappa di calore con la colorazione categoricaCiao @samir
Sebbene le mappe di calore possano utilizzare una variabile di colore categoriale, come hai notato lo fa in un modo a volte indesiderabile, ovvero considerare i livelli della variabile di colore come numerici e fornire un gradiente. Questo *è* utile nei momenti in cui si può presumere che quei livelli abbiano una certa dimensionalità, e hai molte osservazioni sovrapposte, poiché puoi quindi distinguere la distribuzione generale della tua variabile categoriale semiquantitativa nello spazio bidimensionale (e poiché la heatmap sta operando sui valori di quei punti sovrapposti, è necessario un po' di numerazione per la variabile color in modo da poter calcolare una media).
In questo caso, potrei optare per un grafico a dispersione e cambiare i punti in quadrati e aumentare la dimensione dell'indicatore. Ciò produce quanto segue. È utile? (la tua tabella dati e il nuovo script sono allegati)
