기존 그래프 빌더 창의 프레임 크기를 스크립팅하는 방법JSL을 사용하여 기존 Graph Builder 창의 프레임 크기를 설정하는 방법이 있습니까?
예를 들어 그래프 빌더 창이 열려 있고 해당 창에 있는 그래프의 전체 프레임 크기를 800x600으로 설정하는 JSL 파일을 실행하고 싶다고 가정해 보겠습니다. JSL 스크립트에서 GB 객체에 대한 참조 없이도 가능합니까?
자동화 및 스크립팅Re: 기존 그래프 빌더 창의 프레임 크기를 스크립팅하는 방법그랬어요!Jarmo님, 그리고 응답해주신 모든 분들께 감사드립니다!!
Re: 기존 그래프 빌더 창의 프레임 크기를 스크립팅하는 방법여기까지만 추측하면... Fit to Window는 프레임 상자가 아닌 Graph Builder로 전송되어야 합니다(<< Get Scriptable Object가 여기서 도움이 될 수 있음). Wrap이 사용되는 경우(또는 그룹 X), 그룹 수에 따라 크기를 계산해야 할 수도 있습니다. 아니면 그래프 빌더 창의 크기를 조작할 수 있나요?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:Sex), Y(:Height), Group X(:Age)),
Elements(Box Plot(X, Y))
);
wait(0);
win = Get Window List();
//Find graph builder windows
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
last_gb << Fit to Window("On");
last_gb << Size(800,600); // instead of manipulating framebox
//frame = Report(last_gb)[FrameBox(1)];
//frame << Frame Size(800, 600);
XPath는 JMP가 아닙니다 XPath - 위키피디아 하지만 보고서의 다양한 개체에 쉽게 액세스할 수 있는 방법입니다. << Get XML을 사용하면 XPathing 중인 항목을 확인하는 데 도움이 됩니다.
Report(gb) << Get Xml;
Re: 기존 그래프 빌더 창의 프레임 크기를 스크립팅하는 방법엄청난.
"창에 맞춤"이 "꺼짐"이 아닌 경우 해당 프레임 크기가 항상 작동하는 것은 아닙니다.나는 운 없이 "창에 맞춤" 설정도 수정하기 위해 이 코드를 적용하려고 30분 동안 노력했습니다.어떻게 할 수 있는지 아이디어가 있나요?
그리고 흥미롭게도 그래프 빌더 창에 여러 플롯이 있는 경우(예: 랩 필드에 변수가 있는 경우) 프레임 크기는 전체 플롯 영역 대신 개별 플롯 프레임을 수정합니다.개별 플롯 대신 전체 플롯 영역의 크기를 지정된 크기로 조정할 수 있습니까?
마지막으로 이런 코딩은 어디서 배웠나요?10년차 Python 코더(및 20년차 Perl 코더)로서 JSL은 이해하기 꽤 어렵다고 말하고 싶습니다.해당 항목(XPath, Select...)에 대한 스크립팅 인덱스를 읽은 후에도 여기서는 무슨 뜻인지 아직도 잘 모르겠습니다...
감사해요!
Re: 기존 그래프 빌더 창의 프레임 크기를 스크립팅하는 방법을 위한 @마크_베일리 의 스크립트가 작성된 대로 작동하려면 그래프 상자가 마지막으로 열린 창이 되어야 할 것입니다. 별도의 스크립트에서 시작할 때는 더 이상 그렇지 않을 것으로 추측됩니다.그래프 빌더 창만 선택하도록 이와 같이 수정할 수 있으며, 최소한 하나의 창이 열려 있는지 확인하고 싶을 것입니다.
Names Default to Here( 1 );
//Find graph builder windows
graphs = filter each({w}, win,
if(
length(w << XPath("//OwnerBox[@helpKey='Graph Builder']")) > 0 ,
1,
0
)
);
//Choose the last one
frame = (graphs[N Items(graphs)] << XPath( "//FrameBox" ))[1];
//Modify the frame
frame << Select << Frame Size( 800, 600 );
이 추가 기능에서 3D 플롯 창을 찾을 때 다음과 유사한 작업을 수행합니다. 3D 플롯 도구 를 선택하고 사용자가 수정할 창을 선택하도록 했습니다.코드가 켜져 있습니다. GitHub .
Re: 기존 그래프 빌더 창의 프레임 크기를 스크립팅하는 방법이 답변이 마음에 들지만 "dt =..." 및 "obj = ..." 행을 꺼내고 "//!"를 넣으면 오류가 발생합니다. 상단에서 더블클릭하세요.오류는 다음과 같습니다.
Subscript Range in access or evaluation of '(win[N Items(win)] << XPath("//FrameBox"))[ /*###*/1]' , (win[N Items( win )] << XPath( "//FrameBox" ))[/*###*/1]Re: 기존 그래프 빌더 창의 프레임 크기를 스크립팅하는 방법다음은 대체 접근 방식입니다. 현재 모든 창의 목록을 얻을 수 있습니다. 모양순으로 정렬되어 있으므로 방금 그래프 빌더를 열었다면 마지막 항목이 됩니다. 그렇지 않으면 창 목록을 검사하여 원하는 GB를 찾을 수 있습니다.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
);
win = Get Window List();
frame = (win[N Items(win)] << XPath( "//FrameBox" ))[1];
frame << Select << Frame Size( 800, 600 );
스크립트를 메뉴나 도구 모음 항목으로 추가하거나 추가 기능으로 만들 수 있습니다.
Re: 기존 그래프 빌더 창의 프레임 크기를 스크립팅하는 방법그래프 빌더에 대한 참조를 얻을 수 있다면 가장 쉬운 것입니다. 예를 들어 개요 상자에 대한 참조를 얻은 후 << Get Scriptable Object를 사용할 수 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
gb = (nw[OutlineBox("Graph Builder")] << Get Scriptable Object);
fb = Report(gb)[FrameBox(1)];
fb << Frame Size(800,200);
또는 어떤 경우에는 창에서 직접 프레임박스를 찾을 수도 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
nw[FrameBox(1)] << Frame Size(800,200);
그리고 마지막으로 XPath
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
(nw << XPath("//FrameBox")) << Frame Size(800,200);
Current Window()를 사용하여 창에 대한 참조를 얻을 수 있지만 스크립트 창에서 사용하는 것은 약간 귀찮고 도구 모음/바로가기/추가 기능에서 훨씬 더 잘 작동합니다.