참조 테이블에서 참조선 추가안녕, @txnelson
가변성 플롯 그래프를 만들고 각 개별 차트에 대해 다른 값을 가진 참조선을 추가하려고 합니다. 현재 참조선을 그릴 수 있지만 문제는 참조 테이블에 데이터 테이블의 모든 테스트 열이 포함되어 있지 않으면 스크립트가 작동하지 않는다는 것입니다.
다음은 내가 시도한 것이며 참조 테이블에 데이터 테이블의 모든 테스트가 있는 경우 작동합니다.
Names Default To Here( 1 );
Clear Globals();
dt = Open("Data table.jmp"); // Open data table
// Loop to get column name Currents and Voltages
colist = {};
Col_List = dt << Get Column Names( "String" );
For( q = 1, q <= N Items( Col_List ), q++,
If( Contains( Col_List[q], "Current" ) | Contains( Col_List[q], "Voltage" ),
Column( Col_List[q] ) << Set Selected( 1 );
Insert Into( colist, Col_List[q] );
)
);
// Var Chart
vc= dt << Variability Chart(
Y( (Eval( colist )) ),
X( :Wafer ID ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 )
);<BR />// Reference data table
dt1 = Open ("Reference table.jmp");
xb = Column(dt1, "Reference") << getValues;
// Loop to add reference line to the variability chart
For( i = 1, i <= N Items( vc ), i++,
Report( vc[i] )[Framebox( 1 )] << DispatchSeg( CustomStreamSeg( 3 ), {Line Width( 2 )} );
Report( vc[i] )[AxisBox( 1 )] << {Add Ref Line( xb[i], "Solid", "Green", "RTS", 2 )};
);스크립팅Re: 참조 테이블에서 참조선을 추가합니다.몇 가지 문제가 있습니다.
- 플랫폼마다 출력 구조가 다르기 때문에 트리 구조가 다릅니다.따라서 출력 내의 다른 개체에 대한 매핑이 다릅니다.
- "데이터 테이블"에 대한 포인터로 dt를 지정하지만 나중에 스크립트에서 코드에 존재하지 않는 dt2 변수가 참조하는 데이터 테이블을 가리키는 오버레이 플롯을 실행하려고 시도합니다.
- 연관 배열을 만드는 코드에서 참조라는 참조 데이터 테이블의 변수를 사용합니다.최적화 루프 토론에서 제공한 샘플 데이터에서 해당 데이터 테이블의 변수를 평균이라고 합니다.
다음은 다음 출력을 생성하는 코드 수정입니다.

Names Default To Here(1);
// dt = Open("Data table.jmp"); // Open data table
dt=data table("Data Table");
// dt1 = Open("Reference table.jmp");
dt1=data table("Reference data table");
// Loop to get column name Currents and Voltages
colist = {};
Col_List = dt << Get Column Names("String");
For(q = 1, q <= N Items(Col_List), q++,
If(Contains(Col_List[q], "Current") | Contains(Col_List[q], "Voltage"),
Column(Col_List[q]) << Set Selected(1);
Insert Into(colist, Col_List[q]);
)
);
// Overlay Plot
vc = dt << Overlay Plot( Y( Eval( colist ) ), No Overlay( 1 ),Ungroup Plots( 1 ) );
aa_refs = Associative Array(dt1:Tests << get values, dt1:mean << get values);
// Loop to add reference line to the variability chart
For(i = 14, i <= N Items(colist), i++,
If(Contains(aa_refs, colist[i]),
Report(vc)[AxisBox(1)] << Add Ref Line(aa_refs[colist[i]], "Solid", "Green", "RTS", 2);
);
);
JMP 설명서 라이브러리의 도움말 풀다운 메뉴에서 사용할 수 있는 스크립팅 가이드의 트리 표시에 대해 읽어 보십시오.
Re: 참조 테이블에서 참조선을 추가합니다.안녕 @jthi ,
오버레이 플롯에서 코드를 지쳤지만 오류가 있는 것 같습니다. 어떤 제안?
Names Default To Here(1);
// dt = Open("Data table.jmp"); // Open data table
// dt1 = Open("Reference table.jmp");
// Loop to get column name Currents and Voltages
colist = {};
Col_List = dt << Get Column Names("String");
For(q = 1, q <= N Items(Col_List), q++,
If(Contains(Col_List[q], "Current") | Contains(Col_List[q], "Voltage"),
Column(Col_List[q]) << Set Selected(1);
Insert Into(colist, Col_List[q]);
)
);
// Overlay Plot
vc = dt2 << Overlay Plot( Y( Eval( colist ) ), No Overlay( 1 ),Ungroup Plots( 1 ) );
aa_refs = Associative Array(dt1:Tests << get values, dt1:Reference << get values);
// Loop to add reference line to the variability chart
For(i = 1, i <= N Items(colist), i++,
If(Contains(aa_refs, colist[i]),
Report(vc[i])[Framebox(1)] << DispatchSeg(CustomStreamSeg(3), {Line Width(2)});
Report(vc[i])[AxisBox(1)] << {Add Ref Line(aa_refs[colist[i]], "Solid", "Green", "RTS", 2)};
);
);

Re: 참조 테이블에서 참조선을 추가합니다.다음은 참조 테이블을 직접 읽는 약간 다른 솔루션입니다.
Names Default To Here( 1 );
Clear Globals();
//dt = Open( "Data table.jmp" ); // Open data table
dt = Data Table( "data table" );
// Loop to get column name Currents and Voltages
colist = {};
Col_List = dt << Get Column Names( "String" );
For( q = 1, q <= N Items( Col_List ), q++,
If( Contains( Col_List[q], "Current" ) | Contains( Col_List[q], "Voltage" ),
Column( Col_List[q] ) << Set Selected( 1 );
Insert Into( colist, Col_List[q] );
)
);
// Var Chart
vc = dt << Variability Chart(
Y( (Eval( colist )) ),
X( :Wafer ID ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 )
);// Reference data table
//dt1 = Open( "Reference table.jmp" );
dt1 = Data Table( "reference table" );
xb = Column( dt1, "Reference" ) << getValues;
// Loop to add reference line to the variability chart
For( i = 1, i <= N Items( vc ), i++,
//Report( vc[i] )[Framebox( 1 )] << DispatchSeg( CustomStreamSeg( 3 ), {Line Width( 2 )} );
testVal = Word( -2, Report( vc[i] )[Outline Box( 2 )] << get title, " " ) || " " || Word(
-1,
Report( vc[i] )[Outline Box( 2 )] << get title,
" "
);
testRow = dt1 << get rows where( :tests == testVal );
If( N Rows( testRow ) > 0,
Report( vc[i] )[AxisBox( 1 )] << Add Ref Line( dt1:Reference[testRow[1]], "Solid", "Green", "RTS", 2 )
);
);Re: 참조 테이블에서 참조선을 추가합니다.colist를 반복하고 if 문을 사용하여 dt1에 특정 값이 있는지 확인한 다음 dt1에서 찾은 값을 기반으로 참조선을 추가할 수 있습니다. 다음은 연관 배열을 사용하는 한 가지 옵션입니다(값에 따라 참조선을 숨길 수 있으므로 가변성 차트의 경우 Y축에 스케일링을 추가해야 할 수 있음).
Names Default To Here(1);
// dt = Open("Data table.jmp"); // Open data table
// dt1 = Open("Reference table.jmp");
// Loop to get column name Currents and Voltages
colist = {};
Col_List = dt << Get Column Names("String");
For(q = 1, q <= N Items(Col_List), q++,
If(Contains(Col_List[q], "Current") | Contains(Col_List[q], "Voltage"),
Column(Col_List[q]) << Set Selected(1);
Insert Into(colist, Col_List[q]);
)
);
// Var Chart
vc = dt << Variability Chart(
Y((Eval(colist))),
X(:Wafer ID),
Analysis Type("Choose best analysis (EMS REML Bayesian)"),
Show Range Bars(0),
Std Dev Chart(0),
Points Jittered(1)
);// Reference data table
aa_refs = Associative Array(dt1:Tests << get values, dt1:Reference << get values);
// Loop to add reference line to the variability chart
For(i = 1, i <= N Items(colist), i++,
If(Contains(aa_refs, colist[i]),
Report(vc[i])[Framebox(1)] << DispatchSeg(CustomStreamSeg(3), {Line Width(2)});
Report(vc[i])[AxisBox(1)] << {Add Ref Line(aa_refs[colist[i]], "Solid", "Green", "RTS", 2)};
);
);