보고서를 생성할 때 FrameBox 크기를 변경할 수 없습니다. 모든 표시 상자와 창을 생성할 때만 변경할 수 있습니다.모두,
GraphBuilder를 생성하는 함수가 포함된 스크립트가 있습니다. 이 스크립트는 표시 상자에 압축되어 새 창에 배치됩니다. 그런데 어떻게 된 걸까요? 함수 내에서 FrameBox 크기를 변경하는 명령은 무시되고, 창이 생성될 때만 변경할 수 있습니다. 왜 그럴까요? 이 기능을 함수 내부에 구현해서 별도의 수정 없이도 플롯을 출력할 수 있게 하고 싶습니다. 제목 변경은 함수 내에서 가능한데, 크기를 변경하지 않는 이유는 무엇일까요?
FrameBox 크기를 변경하려는 3가지 시도 중 세 번째 시도만 성공한 예는 다음과 같습니다.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
X_Parameter = "height";
Y_Parameter = "weight";
groupColumn = "sex";
titleText = "Example";
GBfunction= Function( {dt, X_parameter, Y_Parameter, groupByColumnString, titleText = ""},
groupByColumn = Column( dt, groupByColumnString );
cb = Context Box(
gb = Graph Builder(
Size( 350, 600 ),
Ignore Platform Preferences( 1 ),
Show Control Panel( 0 ),
Variables( X( Column( X_Parameter ) ), Y( Column( Y_Parameter ) ), Overlay( groupByColumn ) ),
);
rgb = gb << Report;
(rgbOB = ((rgb << XPath( "//OutlineBox[@helpKey = 'Graph Builder']" ))[1])) << Set Title( titleText );
//Attempt #1
(rgb << XPath( "(//OutlineBox//FrameBox)" )) << Frame Size( 350, 200 );
//Attempt #2
//(rgbOB << XPath( "//FrameBox" )) << Frame Size( 350, 200 );
);
Return( cb );
);
lub = Lineup Box( N Col( 3 ) );
lub << Append( GBfunction( dt, X_Parameter, Y_Parameter, groupColumn, titleText ) );
ob_group = Outline Box( "GB Function example: " || (dt << Get Name) );
ob_group << Append( lub );
nw = New Window( (dt << get name), ob_group );
//Attempt #3
rgb = ob_group << XPath( "//OutlineBox[@helpKey='Graph Builder']" );
//(rgb << XPath( "(//OutlineBox//FrameBox)" )) << Frame Size( 350, 200 );
자동화 및 스크립팅Re: 보고서를 생성할 때 FrameBox 크기를 변경할 수 없습니다. 모든 표시 상자와 창을 생성한 경우에만 가능합니다.프레임 크기를 변경하는 것은 제대로 작동하지 않는 것 같습니다. 프레임이 아직 시각화되지 않았기 때문입니다. 일부 자동 크기 조정이 적용되고 잠재적으로 타이밍 문제도 발생할 수 있습니다.
Re: 보고서를 생성할 때 FrameBox 크기를 변경할 수 없습니다. 모든 표시 상자와 창을 생성한 경우에만 가능합니다.자동 확장을 0으로 설정하고 확장을 없음으로 설정해 보았지만 분명히 도움이 되지 않았습니다.:(
Re: 보고서를 생성할 때 FrameBox 크기를 변경할 수 없습니다. 모든 표시 상자와 창을 생성한 경우에만 가능합니다.크기가 이상하게 나타나는 원인을 파악하는 것은 항상 쉬운 일이 아닙니다. Graph Builder의 << Size를 사용하지 않는 특별한 이유가 있나요? 예를 들어 그룹을 사용하거나 래핑할 때처럼 사전 계산이 필요할 수 있다는 것을 알고 있습니다.
더 보기...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
X_Parameter = "height";
Y_Parameter = "weight";
groupColumn = "sex";
titleText = "Example";
GBfunction = Function({dt, X_parameter, Y_Parameter, groupByColumnString, titleText = ""}, {Default Local},
groupByColumn = Column(dt, groupByColumnString);
cb = Context Box(
gb = dt << Graph Builder(
Size(100, 100),
Ignore Platform Preferences(1),
Show Control Panel(0),
//Fit To Window("Off"),
Variables(
X(Column(X_Parameter)),
Y(Column(Y_Parameter)),
Overlay(groupByColumn)
),
);
);
rgb = Report(gb);
(rgbOB = ((rgb << XPath("//OutlineBox[@helpKey = 'Graph Builder']"))[1])) << Set Title(titleText);
fbs = rgb << XPath("(//OutlineBox//FrameBox)");
gb << Size(400, 250);
Return(cb);
);
lub = Lineup Box(N Col(3));
lub << Append(GBfunction(dt, X_Parameter, Y_Parameter, groupColumn, titleText));
ob_group = Outline Box("GB Function example: " || (dt << Get Name));
ob_group << Append(lub);
nw = New Window((dt << get name), ob_group);
Re: 보고서를 생성할 때 FrameBox 크기를 변경할 수 없습니다. 모든 표시 상자와 창을 생성한 경우에만 가능합니다.네, 이유가 있습니다. Fit Y by X를 활용한 이전 스크립트에서 느꼈던 것과 같은 모양과 느낌을 모방해야 했기 때문입니다.
GraphBuilder는 GB 표시 상자의 다른 요소(예: 축 또는 범례 크기)에 따라 FrameBox 크기를 변경합니다.
최종적으로 이러한 플롯은 보고서에 포함되는데, 그래프 영역 크기(정확히 FrameBox의 크기)는 보고서의 여러 플롯 간에 일관되어야 합니다. 바로 그 이유 때문입니다.
Re: 보고서를 생성할 때 FrameBox 크기를 변경할 수 없습니다. 모든 표시 상자와 창을 생성한 경우에만 가능합니다.한 가지 옵션은 먼저 새 창을 만드는 것입니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
X_Parameter = "height";
Y_Parameter = "weight";
groupColumn = "sex";
titleText = "Example";
GBfunction = Function({lub, dt, X_parameter, Y_Parameter, groupByColumnString, titleText = ""}, {Default Local},
cb = Context Box(
gb = dt << Graph Builder(
Size(600, 600),
Ignore Platform Preferences(1),
Show Control Panel(0),
Fit To Window("Off"),
Variables(X(Eval(X_Parameter)), Y(Eval(Y_Parameter)), Overlay(Eval(groupByColumnString))),
)
);
rgb = Report(gb);
lub << Append(cb);
(rgbOB = ((rgb << XPath("//OutlineBox[@helpKey = 'Graph Builder']"))[1])) <<
Set Title(titleText);
fbs = rgb << XPath("(//OutlineBox//FrameBox)");
fbs << Frame Size(400, 250);
);
lub = Lineup Box(N Col(3));
ob_group = Outline Box("GB Function example: " || (dt << Get Name));
ob_group << Append(lub);
nw = New Window((dt << get name), Window View("Invisible"), ob_group);
GBfunction(lub, dt, X_Parameter, Y_Parameter, groupColumn, titleText);
nw << Show Window(1);
Re: 보고서를 생성할 때 FrameBox 크기를 변경할 수 없습니다. 모든 표시 상자와 창을 생성한 경우에만 가능합니다.작성하신 예제는 그대로 작동합니다. 하지만 실제 스크립트에서 구현하려고 하면 FrameBox의 크기가 Size(350, 600)에서 마지막 부분에서 다른 값으로 조정됩니다.
기본적으로 LineUpBox를 사용하는 데에는 이유가 있습니다. 해당 상자에 여러 개의 플롯을 생성하고, 세 번째 플롯마다(정확히 말하면 각 행의 가장 오른쪽에 있는 모든 플롯마다) 범례를 표시합니다(모든 플롯에 동일하게). 따라서 세 개의 플롯으로 실행하면 세 FrameBox의 최종 크기는 다음과 같습니다.
{{350, 220}, {350, 220}, {350, 240}}
내가 크기를 조정하려고 하는 {350, 200}이나 GraphBuilder가 만든 초기 {350, 600} 대신에요.
나중에 당신의 제안을 깨는 실제 예제를 만들어보도록 하겠습니다.
Re: 보고서를 생성할 때 FrameBox 크기를 변경할 수 없습니다. 모든 표시 상자와 창을 생성한 경우에만 가능합니다.이 버그는 GraphBuilder에서 오랫동안 발생해 온 버그이며, 쉽게 해결할 수 있는 방법이 없습니다. JMP로 알림을 보낼 수 있는 외부 프로그램이 있는데(JMP가 runcommand로 시작하는 로컬호스트 서버입니다), 0.25초 후에 JMP에 ping을 보내라는 메시지를 보냅니다. 그 ping을 통해 프레임 크기를 강제로 적용합니다. 이제 모든 상자가 그려진 후에 적용됩니다.