imposta il colore della riga in base ai valori RGB specificatiCiao, sto cercando di impostare il colore della riga (non il colore della cella) specificando i valori RGB nelle mie colonne. Tuttavia, non riesco a ottenere il ciclo corretto per assegnare i colori personalizzati che desidero. Qualcuno potrebbe aiutare?
Codice e datatable allegati. Grazie!
// Get the current data table
dt = Current Data Table();
// Initialize the color lists
RedList = Column(dt, "Red") << Get Values;
GreenList = Column(dt, "Green") << Get Values;
BlueList = Column(dt, "Blue") << Get Values;
// Ensure we do not exceed the number of rows or the number of items in any color list
minLength = Min( N Rows(dt), N Items(RedList), N Items(GreenList), N Items(BlueList) );
// Loop to set the row colors
For( i = 1, i <= minLength, i++,
// Clear any previous selections
dt << Clear Select;
// Select the current row
dt << Select Where( Row() == i );
// Set the row color
dt << Set Row Colors( RedList[i], GreenList[i], BlueList[i] );
);
Automazione e scriptingRe: imposta il colore della riga in base ai valori RGB specificatiQuesto sarà un po' lento a causa di tutte le selezioni in corso
Names Default To Here(1);
dt = Current Data Table();
dt << show window(0);
For Each Row(dt,
dt << Clear Select;
dt << Select Rows(Row());
dt << Colors(RGB Color(Eval List({:Red, :Green, :Blue}) / 255));
);
dt << show window(1);
se è richiesta maggiore velocità, è possibile renderla più veloce selezionando più righe (tutte le righe che hanno un colore specifico contemporaneamente) o impostando gli stati delle righe.
Names Default To Here(1);
dt = Current Data Table();
Summarize(dt, uniq = By(:Color), r = Min(:Red), g = Min(:Green), b = Min(:Blue));
For Each({cur_color, idx}, uniq,
dt << Select Where(:Color == cur_color);
dt << Colors(RGB Color(Eval List({r[idx], g[idx], b[idx]}) / 255));
dt << Clear Select;
);

Bella foto!
Modificare:
Mi è appena venuto in mente che potresti anche usare la tabella di riepilogo per impostare i colori
Names Default To Here(1);
dt = Current Data Table();
dt_summary = dt << Summary(
Group(:Color),
Mean(:Red),
Mean(:Green),
Mean(:Blue),
Freq("None"),
Weight("None"),
statistics column name format("column")
);
For Each Row(dt_summary,
dt_summary << Select Rows(Row());
dt_summary << Colors(RGB Color(Eval List({:Red, :Green, :Blue}) / 255));
dt_summary << Clear Select;
);
Close(dt_summary, no save);
Modifica2: un'altra opzione che scorre sull'intera tabella ma senza selezioni
Names Default To Here(1);
dt = Current Data Table();
For Each Row(dt,
Row State(Row()) = Color State(Eval List({:Red, :Green, :Blue} / 255));
);
Non sono riuscito a capire come convertire lo stato del colore (ad esempio Color State (-15527920)) in numero (dovrebbe essere 512,925536155701), quindi avrei potuto creare una matrice di stati della riga e utilizzare << Imposta stati della riga.
Re: imposta il colore della riga in base ai valori RGB specificatiGrazie! Queste soluzioni sono veramente efficaci ed efficienti!
Re: imposta il colore della riga in base ai valori RGB specificati2 cose
- La sintassi per impostare il colore dello stato della riga non era corretta.
- L'utilizzo di Select Where() ha reso il loop molto lento.
Ecco la mia modifica
// Get the current data table
dt = Current Data Table();
// Initialize the color lists
RedList = Column(dt, "Red") << Get Values;
GreenList = Column(dt, "Green") << Get Values;
BlueList = Column(dt, "Blue") << Get Values;
// Ensure we do not exceed the number of rows or the number of items in any color list
minLength = Min( N Rows(dt), N Items(RedList), N Items(GreenList), N Items(BlueList) );
// Loop to set the row colors
For( i = 1, i <= minLength, i++,
// Clear any previous selections
dt << Clear Select;
// Select the current row
dt << Select rows( i );
// Set the row color
dt << Colors( rgb color(redlist[i],greenlist[i],bluelist[i]) );
);Re: imposta il colore della riga in base ai valori RGB specificatiMi dispiace rispolverare un vecchio post, ma ho imparato qualcosa in proposito proprio ora, dopo aver faticato un po'. Stavo anche cercando di convertire gli stati colore in numeri, senza successo. Invece, ho trovato un metodo ancora più veloce, evitando i loop. Sembra un po' un imbroglio, ma creare una colonna formula e poi lasciare che JMP usi la funzione integrata per copiare quegli stati di riga è stato significativamente più veloce rispetto alla precedente versione Edit2 di @jthi , molto veloce.
(dt << new column ("Color", formula (color state (RGB color (:R, :G, :B))))) << copy to row states;