주어진 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);
Edit2: 전체 테이블을 반복하지만 선택 항목이 없는 옵션이 하나 더 있습니다.
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이어야 함)로 변환하는 방법을 알 수 없었기 때문에 행 상태 행렬을 구축하고 << 행 상태 설정을 사용할 수 있었습니다.
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;