définir la couleur de la ligne en fonction des valeurs RVB donnéesBonjour, j'essaie de définir la couleur des lignes (et non la couleur des cellules) en fonction des valeurs RVB données dans mes colonnes. Cependant, je ne parviens pas à obtenir la boucle correcte pour attribuer les couleurs personnalisées que je souhaite. Quelqu'un pourrait-il m'aider ?
Code et table de données ci-joints. Merci!
// 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] );
);
Automatisation et scriptsRe : définir la couleur des lignes en fonction des valeurs RVB donnéesCe sera un peu lent en raison de toutes les sélections.
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);
si plus de vitesse est requise, elle peut être accélérée en sélectionnant plusieurs lignes (toutes les lignes qui ont une couleur spécifique en même temps) ou en définissant les états des lignes.
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;
);

Jolie photo!
Modifier:
Je viens de penser que vous pouvez également utiliser le tableau récapitulatif pour définir les couleurs.
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);
Edit2 : une option supplémentaire en boucle sur toute la table mais sans sélections
Names Default To Here(1);
dt = Current Data Table();
For Each Row(dt,
Row State(Row()) = Color State(Eval List({:Red, :Green, :Blue} / 255));
);
Je n'arrivais pas à comprendre comment convertir l'état de couleur (par exemple l'état de couleur (-15527920)) en nombre (devrait être 512.925536155701) afin d'avoir pu construire une matrice d'état de ligne et utiliser << Définir les états de ligne.
Re : définir la couleur des lignes en fonction des valeurs RVB donnéesMerci! Ces solutions sont vraiment efficaces, et efficientes !
Re : définir la couleur des lignes en fonction des valeurs RVB données2 choses
- La syntaxe permettant de définir la couleur de l'état de la ligne était incorrecte.
- L'utilisation de Select Where() rendait la boucle très lente.
Voici ma modification
// 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: Définir la couleur d'une ligne à partir de valeurs RVB donnéesDésolé de déterrer un vieux sujet, mais je viens de trouver une solution après quelques tâtonnements. J'essayais aussi de convertir les états de couleur en nombres, sans succès. Finalement, j'ai trouvé une méthode encore plus rapide, car elle évite les boucles. C'est un peu comme tricher, mais créer une colonne de formule, puis laisser JMP utiliser la fonction intégrée pour copier ces états de ligne, s'est avéré bien plus rapide que la version Edit2, pourtant très performante, de @jthi .
(dt << new column ("Color", formula (color state (RGB color (:R, :G, :B))))) << copy to row states;