행 상태의 마커 및 색상이 있는 강제 범례안녕하세요,
마커와 색상을 사용하여 범례를 만들려고 하는데 이를 선택하고 싶습니다. 행 상태(색상 상태, 마커 상태, 결합 상태) 덕분에 쉬울 줄 알았습니다. 그러나 각 행에 색상과 마커가 할당되면 범례에서 이를 강제로 적용할 방법을 찾을 수 없습니다.
스크립트로 수행하고 싶습니다(범례가 있는 상자를 추가하려고 생각 중임). 그러나 제가 만든 "마커"를 처리할 방법을 찾을 수 없습니다.
감사해요
Re: 행 상태의 마커와 색상이 있는 강제 범례고마워요 이안님,
그것은 내 초기 아이디어에 더 가깝고 내 스크립트에 통합하기 쉽습니다.
따라서 다른 솔루션이 잘 작동하더라도 저는 이 솔루션을 약간 선호합니다.
Re: 행 상태의 마커와 색상이 있는 강제 범례스크립트로 어떻게 하는지는 모르겠지만 행>색상 또는 열별 표시로 이동하면
당신은 다음을 얻습니다

이제 범례를 마우스 오른쪽 버튼으로 클릭하고 원하는 대로 변경할 수 있습니다. "범례가 있는 창 만들기"를 선택하면 범례가 생성됩니다. 여기에는 범례에서 선택한 항목을 표에서 선택할 수 있는 추가 이점이 있습니다.
다음을 사용하여 스크립팅 내부에서 동일한 작업을 수행할 수 있습니다.
Names Default to here(1);
dt = Open("$SAMPLE_DATA\Big CLass.jmp");
legend = dt << Marker By Column(:age);
new window("Not Really",
Hlistbox(
bivariate(Y(:height), X(:weight)),
legend
)
)
하지만 당신은 당신이 원하는 맞춤화 기능을 잃게 됩니다(적어도 나는 그것을 할 수 있는 방법을 찾지 못했습니다).
Re: 행 상태의 마커와 색상이 있는 강제 범례대안으로 'MarkerSeg' 사용을 고려할 수도 있습니다. 아래 코드에서 'dt'는 색상을 지정하고 표시하려는 열의 모든 고유 수준에 대한 테이블입니다. '테이블 > 요약'을 사용하여 이를 보이지 않게 만들 수 있습니다.
NamesDefaultToHere(1);
// Example data table (markers and colors assigned by 'Lot ID')
dt = New Table( "Rows With Colors and Markers",
Add Rows( 12 ),
New Column( "Lot ID",
Character,
"Nominal",
Set Values(
{"lot1", "lot10", "lot11", "lot12", "lot13", "lot2", "lot3", "lot4",
"lot5", "lot6", "lot7", "lot8"}
),
Lock( 1 )
),
Set Row States(
[896.813481688499, 1104.17848521471, 34064.2516910434, 1584.79095828533,
1856.1745531559, 34848.5869575739, 35120.7292968035, 2704.17450988293,
2976.75480300188, 3200.51829791069, 3408.21706777811, 36368.77437675]
)
);
// Make legend window with MarkerSeg
n = NRow(dt);
xx = J(n, 1, 1);
yy = Transpose(1::n);
legendList = Column(dt, "Lot ID") << getValues;
gb = Graph Box(
FrameSize( 150, 300*(n/16) ),
Y Scale( 0, n+1 ),
X Scale( 0, 6 ),
Y Name(" "),
X Name(" "),
Y Axis(ShowLabels(0), ShowMajorTicks(0), ShowMinorTicks(0)),
X Axis(ShowLabels(0), ShowMajorTicks(0), ShowMinorTicks(0)),
Marker Seg( xx, yy, Row States( dt ) ),
For( i = 1, i<=n, i++, Text( {1.5, i-0.1}, legendList[i] ) )
);
db = PanelBox("Row State Colours and Markers for 'Lot ID'", gb);
New Window( "My Legend", db);
Re: 행 상태의 마커와 색상이 있는 강제 범례좋은 해결책인 것 같습니다. 이제 내 경우에 맞게 조정해야 합니다. 정말 감사합니다!
행 상태에 실망했습니다!
Re: 행 상태의 마커와 색상이 있는 강제 범례당신이 보면
도움말==>스크립팅 색인
그래프 빌더와 범례 상자() 요소를 모두 살펴보고 그래프 빌더가 실행된 후 범례를 조작하는 것은 제한됩니다. 그러나 어떤 용도로든 작동하는 기술을 사용할 수 있지만 약간 번거롭습니다. 그래프 빌더가 원하는 작업을 수행하도록 하는 데 필요한 코드가 포함된 리터럴 문자열을 생성하면 해당 리터럴 문자열을 실행할 수 있습니다. 다음은 매우 원시적인 예입니다. 하지만 이를 사용하여 어떤 작업을 수행할 수 있는지 알게 될 것입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Summarize( dt, groups = by( dt:sex ) );
numofgroups = N Items( groups );
TheCode =
"Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
\!"400\!",
ScaleBox,
{Legend Model(
1,";
For( i = 0, i <= numofgroups - 1, i++,
Show( i );
TheCode = TheCode || "Properties(" || Char( i ) || ", {Line Color (" || Char( i + 3 ) || "),Marker( " || Char( 16 - i ) || ")}),";
);
TheCode = TheCode || "Dispatch( {}, \!"400\!", LegendBox, {Legend Position( {1, [2, 3], 1, [0, 1]} ), Position( {2, 3, 0, 1} )} ))';";
Eval( Parse( TheCode ) );Re: 행 상태의 마커와 색상이 있는 강제 범례고마워요 짐
1. 실제 문제가 아니라는 점에 동의합니다. 조금만 노력하면 목록을 얻을 수 있어요!
2. 아마도 내가 충분히 명확하지 않았을 수도 있습니다. 말씀하신 대로 범례에서 수정해야 하는 항목의 수(N)를 쉽게 얻을 수 있습니다. 이는 graphbuilder를 만드는 스크립트에서 N 줄을 생성해야 함을 의미합니다("legend box(properties(0...N)"를 사용하여 N 줄을 전달해야 함). 그러나 범례 상자에 N+1 줄이 포함된 그래프를 작성하면 부분적으로 작동합니다(N+1 번째 줄은 수정되지 않습니다). 따라서 graphbuilder를 만드는 스크립트 내에서(가능한가요?) 또는 graphbuilder를 만드는 스크립트 후에 루프를 만들어야 합니다(더 이해가 되지만 legendbox로 보낼 수 있는 메시지를 찾을 수 없습니다). .
Re: 행 상태의 마커와 색상이 있는 강제 범례1. 아래 차트에서 볼 수 있듯이 마커에는 번호가 매겨져 있습니다. 이는 스크립팅 가이드에 설명된 대로 스크립트에 의해 생성되었습니다.
도움말==>도서==>스크립팅 가이드

일부 마커에는 그래프 빌더 스크립트에서 볼 수 있는 이름이 할당되어 있습니다. 나는 그 이름의 목록을 모르지만 언제든지 그래프 빌더를 대화식으로 실행하고 원하는 마커를 할당한 다음 생성된 스크립트를 보고 숫자뿐만 아니라 이름도 제공하는지 확인할 수 있습니다.
2. 값 순서 또는 행 순서 수준이 켜져 있지 않으면 범례는 알파벳 또는 숫자 순서로 나열됩니다. 프로그래밍 방식으로 이를 확인한 다음 코드를 조정할 수 있습니다. 데이터 테이블에서 연령을 알아내는 데 있어서 저는 Summarize() 함수를 가장 많이 사용합니다.
summary(dt,bygroup = By(:Age));
"bygroup" 변수에는 발견된 다양한 연령의 목록이 모두 표시됩니다.
N개 항목(그룹별);
발견된 다양한 연령의 수를 제공합니다.
Re: 행 상태의 마커와 색상이 있는 강제 범례빠른 답변 감사드립니다.
1/ 전체 마커 이름 세트가 있으면 작동할 수 있습니다(문서에서 표준 JMP 색상을 찾았습니다). 마커 이름에 해당하는 이름을 어디서 찾을 수 있는지 아시나요?
2/ 이 경우 색상과 마커가 전용 테이블에 기록되면 (eval(substitute(expr(graphbuilder(color1,marker1),expr(color1),mycolor, expr( marker1),mymarker))). 작동합니다. 좋은 진전이지만 대체를 수행하려면 범례의 항목 수를 알아야 합니다.
"큰 클래스" 파일의 경우 더 명확하게 하기 위해 오버레이가 :AGE로 만들어졌는데 파일의 AGE를 모르는 경우 어떻게 해야 합니까?
legendbox에 메시지를 보낼 수 있다면 (그래프 빌더 이후) 루프에서 이를 수행할 수 있을 것입니다. 하지만 문서에서 항목을 수정하는 메시지를 찾을 수 없습니다. 그리고 마지막으로 범례 상자 노드의 트리 노드가 "비어 있습니다".
Re: 행 상태의 마커와 색상이 있는 강제 범례JMP에서 이를 처리하기 위해 제가 찾은 가장 쉬운 방법은 행 상태와 일치하도록 JSL을 사용하여 범례와 그래프를 수정하는 것입니다. 다음은 그래프 빌더에서 범례를 수정하는 방법을 보여주는 스크립트입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
1,
Properties( 0, {Marker( "FilledTall" )} ),
Properties( 1, {Line Color( 1 ), Line Style( "Dashed" ), Marker( "Filled Diamond" )} )
), Legend Model(
1,
Properties( 0, {Marker( "FilledTall" )} ),
Properties( 1, {Line Color( 1 ), Line Style( "Dashed" ), Marker( "Filled Diamond" )} )
)}
),
Dispatch( {}, "400", LegendBox, {Legend Position( {1, [2, 3], 1, [0, 1]} ), Position( {2, 3, 0, 1} )} )
)
);
그것은 다음을 생산합니다
