각 열에 대해 bi-var 플롯을 생성하는 루프가 있는 "sample.jsl" 코드가 있습니다. 이 루프에 범위 슬라이더 상자를 추가하려고 합니다. 스크립트를 실행하면 각 그래프에 대해 별도의 범위 슬라이더 상자가 있는 모든 열에 대해 하나의 그래프가 생성됩니다.
모든 x축 열에 대한 제한은 "limits.jmp"에 있고 데이터 파일은 "Data.jmp"입니다. "sample.jsl" 코드는 한 번에 모든 매개변수에 대해 각각 하나의 그래프를 생성합니다. 모든 그래프에 범위 슬라이더 상자를 추가하도록 코드를 수정하고 싶습니다.
범위 슬라이더 상자에는 두 개의 동적 슬라이더로 제어 상한(ucl)과 lcl이 있어야 합니다.
범위 슬라이더 상자를 생성하는 이 코드가 있지만 단일 그래프에서만 작동합니다. 동적 범위 슬라이더 상자와 함께 모든 그래프를 생성하는 스크립트가 필요합니다.
도움을 주시면 감사하겠습니다. 미리 감사드립니다
myFinalDisplay = expr(
myLimitCol = column(dt, "ColA"); //new
myLimitMin = colMinimum(myLimitCol); show(myLimitMin); //new
myLimitMax = colMaximum(myLimitCol); show(myLimitMax); //new
mylcl = globalLCL["ColA];
myucl = globalUCL["ColA];
myGbDispObj = dt << Bivariate(
Size( 550, 400 ),
Y( "res" ),
X( "ColA" ),
Automatic Recalc( 1 ),
Histogram Borders( 1 ),
Summary Statistics( 1 ),
Fit Spline( 2, {Line Color( {212, 73, 88} )} ),
SendToReport(
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Row Legend(
"Grouping",
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 1 ),
Marker Theme( "Solid" ),
Continuous Scale( 1 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
),
Dispatch(
{},
"1",
ScaleBox,
{Add Ref Line({mylcl, myucl}, "Solid", "Light YellowGreen", "", 1, 0.20 )}
),
Dispatch( {}, "Summary Statistics", OutlineBox, {Close( 1 )} )
)
);
myTbLo = textBox(Char(round(myLimitMin, 2)) || " (OOC = " || char(0.00, 10, 2) || "%)");
myTbHi = textBox(Char(round(myLimitMax, 2)) || " (OOC = " || char(0.00, 10, 2) || "%)");
mySbDispObj = rangeSliderBox();
mySbDispObj = rangeSliderBox(
myLimitMin,
myLimitMax,
mylcl,
myucl,
//script
mySelectedLower = mySbDispObj << getLower;
mySelectedUpper = mySbDispObj << getUpper;
myGbDispObj << Dispatch( {}, "1", ScaleBox, {Add Ref Line( mySelectedLower, "Dashed", "blue", "LCL", 4 )} );
myGbDispObj << Dispatch( {}, "1", ScaleBox, {Add Ref Line( mySelectedUpper, "Dashed", "blue", "UCL", 4 )} );
rUpper = dt << Get Rows Where( myLimitCol[] > mySelectedUpper );
OOC_valUpper = (N Items(rUpper) / Col Number( Column(dt, "ColA") ))*100;
myTbHi << setText(Char(round(mySelectedUpper, 1)) || " (OOC = " || char(OOC_valUpper, 10, 2) || "%)");
rLower = dt << Get Rows Where( myLimitCol[] < mySelectedLower );
OOC_valLower = (N Items(rLower) / Col Number( Column(dt, "ColA") ))*100;
myTbLo << setText(Char(round(mySelectedLower, 1)) || " (OOC = " || char(OOC_valLower, 10, 2) || "%)");
);
mySbDispObj << Set Width( 275 );
myLayout = vListBox(
myGbDispObj,
hListBox(myTbLo, spacerBox(size(50,0)), myTbHi),
mySbDispObj
);
);@pmroz
@txnelson
설명해주셔서 감사합니다.
예, 저는 파이썬에 경험이 있고 jsl을 처음 사용합니다. 이동 중에도 학습합니다.
OP, 이것은 비교적 쉽게 수행할 수 있지만, 귀하가 너무 많은 것을 요구하고 모든 것을 실제로 이해하기에는 너무 경험이 부족한 것 같기 때문에 많은 사람들이 이것을 도와주고 싶어하지 않을 것이라고 생각합니다.
경험 수준을 작성하는 동안 살펴봐야 할 몇 가지 사항은 다음과 같습니다.
- JSL은 실제로 많은 자동 범위 제어를 수행하지 않습니다. 특히 함수 등에 대한 범위 상태와 계층 구조를 기억하지 않습니다. 예를 들어 Python에 익숙하다면 JSL은 매우 실망스럽고 이것을 내면화하고 모든 범위 제어를 시작할 때까지 고통
- 다중의 경우 인터렉티브 거의 동일한 요소(슬라이더 상자가 있는 그래프, 그래프 X/Y/그룹화만 변경됨), 표현식은 잘 작동하지 않습니다.슬라이더 상자와 링크된 개체를 구별해야 하므로 대신 함수 발생기 또는 기타를 사용하십시오.물론 이것은 표현식으로 수행할 수 있지만 일반적으로 대부분의 상황에서 무시할 수 있는 속도 향상만 있는 더 복잡한 설정입니다.
- 하나의 그래프와 하나의 rangeSliderBox로 작게 시작하십시오.명시적 범위를 사용하여 연결하는 방법 알아보기
- 테이블은 행당 하나의 행 상태만 가질 수 있으므로 각 플롯에 대해 별도의 데이터 테이블이 필요합니다.
- 이를 통해 각 플롯에 대해 여러 개의 하위 테이블을 생성하는 경우 사용자가 데이터 테이블로 넘쳐나는 것을 방지하기 위해 보이지 않게 하는 것이 가장 좋습니다.그러나 데이터 테이블이 JMP는 절대 암시적으로 삭제하지 않습니다. .창 닫기를 스크립트 정리와 연결해야 합니다. 모든 관련 데이터 테이블을 닫고 범위 지정에 사용되는 모든 네임스페이스를 삭제합니다.
- 커뮤니티 페이지의 많은 사람들이 기꺼이 도와주지만 질문은 작고 간결해야 합니다.
다음은 각 목록에 대한 슬라이더 상자가 있는 일부 참조선에 영향을 미치는 예입니다. 이전 참조선을 삭제하지 않으므로 원하는 경우 해당 작업을 수행하는 방법을 파악해야 합니다.
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize(dt, ages = By(:age)); // just some list
nw = new window("Some box");
for(i=1, i<=nitems(ages), i++,
olb = outlinebox("Age = " || char(ages[i]),
hlistbox(
rsb = rangesliderbox(colmin(:height), colmax(:height), colquantile(:height, .25), colquantile(:height, .75)),
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
where(char(:age) == ages[i])
);
)
);
(gb<<PARENT></PARENT>그래프가 제대로 작동하고 새 창에 추가됩니다. 그러나 루프를 사용하여 만든 각 그래프에 범위 슬라이더 box() 개체를 추가할 수 없습니다.
그래프를 배치할 빈 목록 상자가 있는 창을 먼저 만든 다음 for 루프를 사용하여 해당 목록 상자에 그래프를 추가할 수 있습니다.
당신이 게시한 메시지가 표시되지 않는 것 같아요?