Graph Builder, 요소 색상을 변경하는 방법 및 SendToReport 구문에 대한 정보안녕하세요,
동적 콘텐츠로 그래프를 생성합니다(변수 수는 런타임에 결정됨).
그래프 빌더를 설정한 후 새 색상을 지정하는 등 몇 가지 사항을 변경하고 싶습니다. 나중에 하는 이유는 이전에 실행할 수 없는 내 스크립트의 다른 부분을 실행하기 전에는 변경 사항을 알 수 없기 때문입니다.
이 예제에 대한 기본 문제를 단순화했습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
// do some other stuff incl. addition or removal of variables to gb
// how do I *MODIFY* the color of Points, Smoother here or add a Line Plot?
도움이 된다면 그래프에서 변수의 위치를 알고 있습니다(위의 예에서 1,1).
건배,
알렉스
Re: 선의 색상을 변경하는 방법안녕 알렉스,
답변이 늦어 죄송합니다.
다음 범례 모델 메시지가 전송되고 있다고 가정합니다.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
- 첫 번째 인수(2)는 ScaleBox 내의 특정 범례 모델을 참조하는 고유 ID입니다. 위의 예에서 값 1은 점을 포함하는 범례 모델을 나타내고 값 2는 부드러운 선을 가리킵니다.
- 두 번째 인수(Properties( 1, {Line Color( 4 )} ))에는 지정된 속성 집합을 적용할 Legend Model 내의 요소에 대한 정보가 포함됩니다.
- 속성(1) 내의 첫 번째 인수는 새 속성을 적용할 항목을 식별하는 0부터 시작하는 항목 번호입니다.
- 속성 내의 두 번째 인수({Line Color( 4 )})는 지정된 범례 모델 항목에 적용할 속성 목록입니다. 이 경우 선 색상을 녹색으로 변경합니다.
다음은 몇 가지 예입니다.
다음 스크립트는 첫 번째 범례 모델(포인트)의 첫 번째 항목을 녹색으로 설정합니다. 이 경우 첫 번째 항목은 "F"입니다.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 1, Properties( 0, {Line Color( 4 )} ) )}
)
)
);
(여기서부터는 위의 스크립트에서 대체할 Legend Model 부분만 제공하겠습니다.)
다음 범례 모델 조각은 포인트 범례 모델 내에서 두 번째 항목("M")의 색상을 변경합니다.
Legend Model( 1, Properties( 1, {Line Color( 4 )} ) )
다음 범례 모델 스니펫은 매끄러운 선 범례 모델 내에서 첫 번째 항목("F")의 색상을 변경합니다.
Legend Model( 2, Properties( 0, {Line Color( 4 )} ) )
다음 범례 모델 스니펫은 매끄러운 선 범례 모델 내에서 두 번째 항목("M")의 색상을 변경합니다.
Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )
참고: 매끄러운 라인의 선 색상을 변경하면 해당 포인트의 색상도 변경되지만 포인트의 포인트 색상을 변경해도 연결된 매끄러운 라인의 색상에는 영향을 미치지 않습니다.
Re: 선의 색상을 변경하는 방법의견을 보내 주셔서 감사합니다.
범례 모델 구문도 설명해 주시겠습니까?
Re: 선의 색상을 변경하는 방법SendToReport 인수의 구문은 다음과 같습니다(스크립팅 인덱스에서).
SendToReport( Dispatch( "Outline name", "Element name", Element type, command );
디스패치 명령의 두 번째 인수("요소 이름")는 올바른 DisplayBox를 찾기 위한 식별자로 사용됩니다. 예를 들어 이 인수는 FrameBox에 대해 Dispatch 명령을 사용할 때 "helpKey" 특성과 일치합니다. 요소 유형 인수는 JMP에게 찾을 속성 유형을 알려줍니다(이 유형은 DisplayBox마다 다르기 때문).
ScaleBox의 경우(이 경우 필요에 따라) 요소 이름 인수는 "charID" 속성을 참조합니다. Graph Builder는 다양한 용도로 여러 ScaleBox를 생성하지만 Legend Model과 같은 메시지를 보내는 데 필요한 ScaleBox에는 "400"이라는 charID가 할당됩니다.
아래는 생성된 5개의 ScaleBox를 보여주는 Graph Builder용 XML(더 아래에 있는 스크립트를 사용하여 생성됨)에서 발췌한 것입니다. 축척 상자 중 하나에 "400"이라는 charID가 있으며 범례 모델 메시지에 사용해야 하는 축척 상자입니다.
<..truncated..>
<..truncated..>
<..truncated..>
Legend Model 메시지를 사용하는 또 다른 방법은 이 ScaleBox에 직접 보내는 것입니다. 이 ScaleBox를 참조하는 한 가지 방법은 아래와 같이 XPath를 사용하는 것입니다. 이 메서드는 charID가 "400"인 ScaleBox를 참조합니다.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
scalebox = gb << xpath("//ScaleBox[@charID=\!"400\!"]");
scalebox << Legend Model( 2, Properties( 1, {Line Color( 4 )} ) );
아래 스크립트는 동일한 작업을 수행하지만 대신 SendToReport 메서드를 사용합니다.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Grid Transparency( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )}
)
)
);
감사해요,
Re: 선의 색상을 변경하는 방법이것은 JMP 개발, 즉 그래프 빌더의 내부 작업을 문서화하는 데 큰 도움이 되는 요청입니다.
Re: 선의 색상을 변경하는 방법나도 똑같이 하지만 이제 생성된 코드를 보았으므로 이해할 수 있어야 합니다.
Legend Model에 대한 문서를 찾을 수 없고 "400"에 대한 문서도 찾을 수 없습니다.
그래서 제가 도움을 요청했고 피드백을 높이 평가하겠습니다.
Re: 선의 색상을 변경하는 방법그래프 빌더의 모든 "내부" 구문이 문서화되어 있지는 않습니다. GB에 관해서는 다음을 수행합니다.
그래프 유형, 기호, 색상, 선 등을 포함하여 내가 원하는 것과 정확히 일치하는 그래프를 만듭니다.
JSL 코드를 얻으려면 작은 빨간색 삼각형을 클릭하십시오.
내 스크립트에 JSL 코드 포함
기본적으로 GB가 무거운 작업을 수행하도록 한 다음 GB에서 생성하는 코드를 사용합니다.
Re: 선의 색상을 변경하는 방법안녕 이안,
훌륭한 예를 들어 주셔서 감사합니다.
범례 모델 구문, 값 "400"의 의미에 대한 정보가 포함된 스크립팅 가이드 부분을 알려 주시겠습니까?
"범례 모델"이라는 단어를 검색했습니다. 적중 항목이 없습니다. 400에는 여러 번의 조회가 있었지만 관련 항목을 식별할 수 없었습니다.
도와주셔서 감사합니다!
건배,
알렉스
Re: 선의 색상을 변경하는 방법대화식으로 수행한 다음 JMP가 자동으로 생성하는 코드를 검사하십시오. 당신의 예를 적응:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
// Add 'weight'
Wait(2);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable({Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )});
// Change the colour of the points and smoother for 'weight' to green
Wait(2);
gb << SendToReport( Dispatch({}, "400", ScaleBox, {Legend Model( 2, Properties( 1, {Line Color( 4 )} ) )} ) );
덜 중요한 질문에 대해서는 '도움말 > 책 > 스크립팅 가이드'에서 찾아볼 수 있습니다.
Re: 선의 색상을 변경하는 방법나는 비슷한 질문을 받았지만 답을 얻지 못했습니다. 이 포럼의 JMP 전문가는 이 질문을 피하거나 JMP 사용자가 이에 대해 더 깊이 알도록 권장하지 않는 것 같습니다.
Re: 선의 색상을 변경하는 방법여기에 더 좋은 예가 있습니다. 점의 색상을 어떻게 변경하고 이 점의 무게를 부드럽게 하려면 어떻게 해야 합니까?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Automatic Recalc( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gbb = Report( gb )[Graph Builder Box( 1 )];
upper_graph_inner_pos = 2;
gbb << Add Variable(
{Column( "weight" ), Role( "Y" ), Position( 1 ), Inner Position( upper_graph_inner_pos )}
);
gb << SendToReport(
Dispatch( {}, "400", ScaleBox, {Legend Model( 1, Properties( 0, {Line Color( RGB color(31,119,180) ), Fill Color( 0 )} ) )} )
);
덜 중요한 질문:
이 문맥에서 "400"은 무엇을 의미합니까?
Re: 선의 색상을 변경하는 방법안녕하세요 @Justin_Chilton , helpKey 와 charID 외에 요소 이름에 사용되는 추가 식별자는 무엇입니까?
축 레이블을 변경하면 JSL 코드는 다음과 같습니다.
gb << SendToReport( Dispatch( {}, "<STRONG>X Title</STRONG>", TextEditBox, {Set Text( "new" )} ))... 하지만 X 타이틀은 디스플레이 트리의 XML 코드에 나타나지 않습니다. 어떤 식별자입니까?
디스플레이 박스와 대화하기