JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)제목에서 알 수 있듯이, JSL 스크립트를 사용하여 숫자 값으로 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)?
저는 현재 JSL 스크립트를 사용하여 데이터 테이블 집합에서 일련의 플롯을 생성하여 한 번의 클릭으로 USL/LSL 한계가 있는 분포 플롯을 표시하고 있습니다. 그리고 플롯에 표시된 한계는 Manage Limits 테이블을 기반으로 합니다(값을 업데이트했습니다). 하지만 개선해야 할 한 가지 단계는 Manage Limits 테이블을 기반으로 실제 숫자 값으로 USL/LSL 레이블을 표시하는 것입니다. 레이블을 하나씩 수동으로 업데이트해야 하는 것을 제외하고는 자동화할 관련 JSL 명령을 찾을 수 없습니다. 예를 보여주는 방법을 아는 사람이 있습니까? 미리 감사드립니다.

For( i = 1, i <= 100, i++,
xCol = Column(dt, i);
if ( Mod( i-8, 5 ) == 0,
rowBox = hlistbox();
win << Append( rowBox )
);
rowBox << Append(
//New Window( "training - Fit Y by X by Serial",
//dt << Fit Group(
Graph Builder(
Size( 350, 350 ),
Fit to Window("off"),
Show Control Panel( 0 ),
Show Title ( 1 ),
Show Subtitle ( 0 ),
Show Legend( 1 ),
Show Header ( 0 ),
Show Footer ( 0 ),
//Update Variable to Column Name
Variables(X( :TEMP ),Y( xCol ),Overlay( :Unit )),
Elements( Smoother( X, Y, Legend( 8 ) ), Points( X, Y, Legend( 9 ) ) ),
SendToReport(
Dispatch(
{}, "Graph Builder",
OutlineBox, {Set Title( "" ), Image Export Display(Normal)},
),
Dispatch(
{}, "Graph Builder",
FrameBox,{Transparency(0.8), Left( 0 ), Right( 0 ), Top( 1 ), Bottom( 1 )},
)
//To update labels USL/LSL limits in numeric value
)
)자동화 및 스크립팅기본 데이터 분석 및 모델링윈도우Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)여기서 몇 가지 아이디어를 얻을 수 있을 것 같습니다. https://community.jmp.com/t5/Discussions/Change-Line-Color-and-Line-Style-in-all-platforms/mp/819799/highlight/true#M99792
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
ml = dt << Manage Limits(
Process Variables(dt << Get Column Group("Processes")),
);
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
dt << Distribution(
Stack(1),
Continuous Distribution(
Column(:NPN1),
Horizontal Layout(1),
Vertical(0),
Process Capability(Use Column Property Specs)
)
);
// "Tool script" starts from here
// Names Default To Here(1);
abs = Current Report() << XPath("//AxisBox");
names = {"A", "B", "C", "D"};
idx = 0;
For Each({ab}, abs,
s = ab << get script;
For Each({cur_s}, s,
If(Head Name(cur_s) == "Add Ref Line",
l = Substitute(Name Expr(cur_s), Expr(Add Ref Line()), Expr(List()));
If(Contains(l, "LSL") | Contains(l, "Target") | Contains(l, "USL"),
// this isn't documented
idx++;
Eval(EvalExpr(
ab << Update Ref Line(1, Expr(idx), "Solid", "Orange", names[idx], 3);
));
);
);
);
);
특정 플랫폼 하나와 축 하나만 있는 경우 이를 단순화할 가능성이 가장 높습니다.
Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)다음은 열에 대한 사양 제한을 설정한 다음 사양 제한을 자동으로 표시하는 그래프 빌더를 실행하는 간단한 스크립트입니다.

Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
htUSL = 66;
htLSL = 55;
Eval(
Eval Expr(
dt:height << set property(
"spec limits",
{LSL( Expr( htLSL ) ), USL( Expr( htUSL ) ), Show Limits( 1 )}
)
)
);
dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)넬슨 씨, 감사합니다. 해당 코드는 제 코드와 비슷한데, USL LSL의 참조 줄을 숫자 값으로 표시할 수도 없습니다.
Num(htUSL)을 사용하여 숫자 값으로 변경하려고 했지만 참조 선이 전혀 없는 플롯이 생성되어 Expr(htUSL)을 사용하여 선을 표시해야 합니다. JSL 스크립트를 통해 숫자 값으로 이러한 한계를 표시하는 다른 옵션은 수동 방식을 제외하고는 없는 듯합니다.
htUSL = 66;
htLSL = 55;
Eval(
Eval Expr(
dt:height << set property(
"spec limits",
{LSL( Expr( htLSL ) ), USL( Expr( htUSL ) ), Show Limits( 1 )},
{LSL( Num( htLSL ) ), USL( Num( htUSL ) ), Show Limits( 1 )}, //Not working
)
)
);Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)Jarmo에게 감사합니다. 이것은 프로세스 역량 방식으로 플롯을 보여주는 데 좋고, 숫자 값 대신 USL LSL도 보여줍니다. 저는 이미 관리 제한 테이블을 업데이트했지만, JSL 스크립트를 통해 플롯에서 숫자 값으로 제한을 보여주는 단계를 하나 더 원합니다.
Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)Set Property("Spec Limits") 함수에서 2개의 목록을 사용하는 이유는 무엇입니까? Spec Limits에는 한 세트의 제한만 허용됩니다. 또한 Eval( EvalExpr() 함수는 포함된 함수에서 Expr()을 찾고 각 Expr()의 값을 확장한 다음 Eval() 함수가 이를 적절히 평가할 수 있습니다. 두 번째 Spec Limits 사양에서 Expr()을 Num()으로 대체했습니다. JMP 목록 내부에 있기 때문에 이를 평가하거나 htLSL과 htUSL을 평가하지 않으므로 JSL에 전달되는 내용은 JMP에서 알 수 없습니다.
두 개 이상의 열을 실행하려는 경우 각 열마다 별도로 사양 제한을 적용해야 합니다.
내 예제를 변경 없이 실행해 보셨나요? 그렇다면 USL 및 LSL 참조선이 있는 그래프가 생성되나요?
Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)안녕하세요, 짐님. "USL" 텍스트 대신 숫자 값으로 참조 줄을 변경하는 것에 대한 질문입니다.
귀하의 코드 예제에서는 USL, LSL 참조선을 변경 없이 그래프로 표시할 수 있습니다. 저는 USL/LSL을 숫자 값(관리 제한 테이블의 참조)으로 표시하고 싶습니다.
USL, LSL을 숫자 값으로 변경하고 싶다는 바람을 보여주기 위해 스냅샷을 첨부했습니다(오른쪽 참조). 하지만 자동화를 위해 JSL 스크립트로 할 수 있기를 바랍니다. 감사합니다.

Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)기존 한계 테이블을 사용하여 참조선을 만드는 예는 다음과 같습니다. 2가지 다른 방법을 사용하는 2가지 다른 예가 있습니다.

Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
// open a limits table created from Manage Limits
dtLimit = New Table( "Limits",
Add Rows( 2 ),
New Column( "Variable", Character, "Nominal", Set Values( {"height", "weight"} ) ),
New Column( "LSL", Set Values( [55, 65] ) ),
New Column( "USL", Set Values( [66, 170] ) ),
New Column( "Target", Set Selected, Set Values( [., .] ) )
);
// One way to set the reference lines
colNames = dt << get column names( string, continuous );
// Create the graphs
For Each( {col}, colNames,
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( As Column( col ) ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// Set the ref lines
// Get the row in the limits table that has the limits for the current column
theRow = (dtLimit << get rows where( dtLimit:Variable == col ))[1];
Report( gb )[AxisBox( 2 )] << add ref line(
dtLimit:LSL[theRow],
"Solid",
"Blue",
Char( dtLimit:LSL[theRow] ),
1
);
Report( gb )[AxisBox( 2 )] << add ref line(
dtLimit:USL[theRow],
"Solid",
"Blue",
Char( dtLimit:USL[theRow] ),
1
);
);
// Second way to set the reference lines using Spec Limits column property
// the default when using the Spec Limits is for graph builder to insure
// the spec limits are displayed on the graph. This example with use the
// spec limits, and then change the label to a numeric
colNames = dt << get column names( string, continuous );
ml = dt << Manage Limits( Process Variables( Eval( colNames ) ) );
ml << load from limits table( dtLimit );
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
// Create the graphs
For Each( {col}, colNames,
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( As Column( col ) ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// Set the ref lines
// Get the limits from the spec limits for the current column
// and change the label
specs = Column( dt, col ) << get property( spec limits );
Report( gb )[AxisBox( 2 )] << add ref line( specs["LSL"], "Solid", "Blue", Char( specs["LSL"] ), 1 );
Report( gb )[AxisBox( 2 )] << add ref line( specs["USL"], "Solid", "Blue", Char( specs["USL"] ), 1 );
);Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)제가 제공한 스크립트를 이해하지 못한 것 같습니다. 플롯에서 스펙 한계를 어떻게 이름 바꾸는지 보여주기 때문입니다. 이것은 LSL, USL 및 대상 텍스트 대신 값을 사용합니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
ml = dt << Manage Limits(
Process Variables(dt << Get Column Group("Processes")),
);
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:SITE), Y(:NPN1)),
Elements(Points(X, Y, Legend(3)))
);
abs = Report(gb) << XPath("//AxisBox");
idx = 0;
For Each({ab}, abs,
s = ab << get script;
For Each({cur_s}, s,
If(Head Name(cur_s) == "Add Ref Line",
l = Substitute(Name Expr(cur_s), Expr(Add Ref Line()), Expr(List()));
If(Contains(l, "LSL") | Contains(l, "Target") | Contains(l, "USL"),
idx++;
Eval(EvalExpr(
ab << Update Ref Line(1, Expr(idx), "Solid", "Blue", Char(l[1]), 1);
));
);
);
);
);

Show Limits가 활성화된 상태에서 사양 제한 열 속성을 사용하지 않고 사용자 이름이 있는 열 속성을 기반으로 참조 줄로 제한을 추가하는 것이 더 나을 가능성이 높습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:SITE), Y(:NPN1)),
Elements(Points(X, Y, Legend(3)))
);
specs = Column(dt, "NPN1") << get property("Spec Limits");
Report(gb)[AxisBox(2)] << Add Ref Line(
specs["LSL"], "Solid", "Blue", Char(specs["LSL"]), 1
);
Report(gb)[AxisBox(2)] << Add Ref Line(
specs["USL"], "Solid", "Blue", Char(specs["USL"]), 1
);
Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)휴일에 대한 답변 감사합니다, 짐. 이제 두 번째 방법으로 숫자 값으로 설정할 수 있습니다.
Re: JSL 스크립트를 사용하여 숫자 값의 Y축 참조선 레이블을 업데이트하는 방법(USL LSL 레이블로 플롯 자동화)예를 들어줘서 고맙습니다, Jarmo. 주어진 두 가지 예 모두 잘 작동합니다. 자동화가 완료되었습니다.