指定されたRGB値で行の色を設定するこんにちは。列に指定された RGB 値で行の色 (セルの色ではありません) を設定しようとしています。ただし、必要なカスタム色を割り当てるための正しいループを取得できません。どなたか助けていただけませんか?
コードとデータテーブルを添付しました。ありがとうございます!
// 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] );
);
自動化とスクリプトRe: 指定された RGB 値で行の色を設定する選択作業が進行中のため、少し遅くなります
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);
さらに速度が必要な場合は、複数の行(同時に特定の色を持つすべての行)を選択するか、行の状態を設定することで速度を上げることができます。
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;
);

素敵な写真!
編集:
要約テーブルを使って色を設定することもできると思いました
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);
編集2: 選択なしでテーブル全体をループするもう1つのオプション
Names Default To Here(1);
dt = Current Data Table();
For Each Row(dt,
Row State(Row()) = Color State(Eval List({:Red, :Green, :Blue} / 255));
);
カラー状態 (たとえば、カラー状態 (-15527920)) を数値 (512.925536155701 のはず) に変換する方法がわからなかったので、行状態マトリックスを構築して << Set Row States を使用しました。
Re: 指定された RGB 値で行の色を設定するありがとうございます! これらのソリューションは本当に効果的で効率的です!
Re: 指定された RGB 値で行の色を設定する2つのこと
- 行状態の色を設定するための構文が正しくありませんでした。
- Select Where() を使用するとループが非常に遅くなります。
これが私の修正です
// 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: 指定されたRGB値で行の色を設定する昔の投稿を掘り起こして申し訳ありませんが、少し苦労した後、今になってようやくこの件について分かりました。私も色状態を数値に変換しようとしましたが、うまくいきませんでした。代わりに、ループを回避してさらに高速な方法を見つけました。少しズルをしているような気がしますが、数式列を作成し、JMPの組み込み関数を使って行状態をコピーさせると、 @jthiさんの以前の非常に高速なEdit2バージョンよりも大幅に高速になりました。
(dt << new column ("Color", formula (color state (RGB color (:R, :G, :B))))) << copy to row states;