set row color by given RGB valuesHi, I'm trying to set row color (not cell color) by given RGB values in my columns. However, i can not get the correct loop for assigning the custom colors that I want. Could anyone help?
Code and datatable attached. Thanks!
// 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] );
);
Automation and ScriptingBetreff: Zeilenfarbe anhand vorgegebener RGB-Werte festlegenDies wird etwas langsam sein, da alle Auswahlen
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);
Wenn eine höhere Geschwindigkeit erforderlich ist, kann diese durch die Auswahl mehrerer Zeilen (alle Zeilen mit einer bestimmten Farbe gleichzeitig) oder durch das Festlegen von Zeilenzuständen erhöht werden.
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;
);

Ein tolles Bild!
Bearbeiten:
Mir ist gerade eingefallen, dass Sie auch die Übersichtstabelle verwenden könnten, um die Farben festzulegen
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: Eine weitere Option, die die gesamte Tabelle durchläuft, jedoch ohne Auswahl
Names Default To Here(1);
dt = Current Data Table();
For Each Row(dt,
Row State(Row()) = Color State(Eval List({:Red, :Green, :Blue} / 255));
);
Ich konnte nicht herausfinden, wie ich den Farbzustand (zum Beispiel Farbzustand (-15527920)) in eine Zahl umwandele (sollte 512,925536155701 sein), also hätte ich eine Zeilenzustandsmatrix erstellen und << Zeilenzustände festlegen verwenden können.
Betreff: Zeilenfarbe anhand vorgegebener RGB-Werte festlegenDanke! Diese Lösungen sind wirklich effektiv und effizient!
Betreff: Zeilenfarbe anhand vorgegebener RGB-Werte festlegen2 Dinge
- Die Syntax zum Festlegen der Zeilenstatusfarbe war falsch.
- Die Verwendung von „Select Where()“ machte die Schleife sehr langsam.
Hier ist meine Modifikation
// 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]) );
);Betreff: Zeilenfarbe anhand gegebener RGB-Werte festlegenTut mir leid, dass ich einen älteren Beitrag wieder aufgreife, aber ich habe gerade nach einigem Herumprobieren etwas dazu gelernt. Ich hatte auch versucht, Farbzustände in Zahlen umzuwandeln, aber ohne Erfolg. Stattdessen habe ich eine noch schnellere Methode gefunden, da sie Schleifen vermeidet. Es fühlt sich zwar etwas wie Schummeln an, aber eine Formelspalte zu erstellen und dann JMP die integrierte Funktion zum Kopieren dieser Zeilenzustände verwenden zu lassen, war deutlich schneller als @jthis zuvor sehr schnelle Edit2-Version.
(dt << new column ("Color", formula (color state (RGB color (:R, :G, :B))))) << copy to row states;