그래프 빌더에서 열의 변수 목록을 Y축으로 사용여러분,
방금 JMP14 Pro에서 JMP15 Pro로 업그레이드했는데 OverlayPlots를 사용하는 많은 JSL 스크립트에 문제가 발생했습니다.더 복잡한 OP 중 일부를 GB로 전환하려고 하는데 GB의 변수 목록을 사용할 때 문제가 발생합니다.OP의 다음 코드는 Y( Eval List ( ???? ) ) 기준을 충족하는 특정 데이터 파일에 대한 모든 변수를 성공적으로 플롯했습니다.나는 다양한 현장 현장에 내가 플롯하려는 센서의 수가 다를 수 있다는 사실을 수용하기 위해 이 코드를 만들었습니다.
// Potential Tair Data
pot_tair_list = {"Datalogger Internal Temperature (C)", "Air Temperature - HMP - 5m (C)", "Air Temperature - HMP (C)",
"Air Temperature, STD - HMP (C)", "Air Temperature - WXT (C)", "Air Temperature @ 5m - HMP (C)", "Air Temperature - MA4100 (C)",
"Air Temperature - EE181 (C)", "Air Temperature - WS700 (C)", "Air Temperature - GMX541 (C)"};
// Create empty list to hold names of the those measurement variables found in data table
act_tair_list = {};
// Run through data table column names and put those that match measurement variable list into new list
For( i = 1, i <= N Items( pot_tair_list ), i++,
If( Contains( dt_col_name_list, pot_tair_list[i] ),
Insert Into( act_tair_list, pot_tair_list[i] )
)
);
******************************
// Plot Air Temperature data
If( N Items( act_tair_list ) > 0,
Graph Builder(
Size( 1600, 500 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Legend Position( "Right" ),
Fit to Window( "Off" ),
Graph Spacing( 3 ),
Variables( X( :Name( "Date & Time" ) ), Y( Eval List( act_tair_list ) ) ),
Elements( Line( X, Y, Legend( 4 ) ), Points( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
"Date & Time",
ScaleBox,
{Format( "m/d/y", 10 ), Min( sdate ), Max( edate ), Interval( "Day" ), Inc( 28 ), Minor Ticks( 0 )}
),
Dispatch(
{},
Y( Eval List( act_tair_list ) ),
ScaleBox,
{Format( "Fixed Dec", 10, 0 ), Inc ( 5 ), Show Major Grid( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model( 1, Properties( 0, {Line Color( 3 ), Fill Color( 0 )}, Item ID( "Battery (V)", 1 ) ) )}
),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 1 )} )
)
)
);
GB는 내가 OP에 사용한 것과 동일한 목록 구성을 좋아하지 않으며 다음 오류를 발생시킵니다.
데이터 테이블에서 지정된 열을 찾을 수 없습니다.{191471} 'Y' 액세스 또는 평가 시, Y( Eval List( act_tair_list ) ) /*###*/플랫폼 시작 시 예외{191471} 'Graph Builder 액세스 또는 평가 시 '
OP 플랫폼을 사용하여 대부분의 JSL 그래프 작성을 완료했지만 이 문제를 해결하는 방법에 대한 지식이 부족합니다.
Y축에 대해 변수 목록을 GB에 전달할 수 있습니까? 그렇다면 해당 형식은 어떻게 보입니까? 실제로 존재하는 특정 센서에 관계없이 모든 현장 현장의 모든 변수에 대해 단일 그래프 스크립트를 계속 사용할 수 있도록 이 문제를 해결하는 데 도움을 주시면 감사하겠습니다.감사해요.
Re: 그래프 빌더에서 열의 변수 목록을 Y축으로 사용합니다.Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
var expr = Expr( Variables( X( :Weight ) ) );
For( c = 1, c <= N Items( col ), c++,
y expr = Expr( Y( Position( 1 ) ) );
Insert Into( y expr, col[c], 1 );
Insert Into( var expr, Name Expr( y expr) );
);
Eval(
Substitute(
Expr(
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
vvv,
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 4 ) )
)
);
),
Expr( vvv ),
Name Expr( var expr )
)
);Re: 그래프 빌더에서 열의 변수 목록을 Y축으로 사용합니다.아이디어는 간단합니다. Substitute()는 표현식 내에서 표현식을 찾기 때문에 명확한 대상이 되도록 기본 표현식 내에 특이한 표현식 vvv를 넣었습니다. 함수는 이를 Y 역할의 열에 대해 작성한 표현식으로 대체합니다.
무슨 말인지 모르겠어요" GB 명령어 끝에서 실제 변수 목록을 호출합니다. " 나는 그런 일을 하지 않습니다. 나는 당신이 무엇을 언급하고 있는지 추측하고 있지만, 실행 중인 코드와 표현식의 차이점에 대해 혼란스러워하고 있다고 말할 수 있습니다. 또한 함수 호출이나 메시지 전송의 명명된 인수는 위치 독립적입니다.
Eval() 표현식을 선택하고 이 코드를 단독으로 실행하는 것이 도움이 될 수 있습니다. 평가되는 새 표현식을 생성합니다.
이 경우는 표현식을 간단히 적용한 것입니다. JMP 스크립팅 가이드를 공부하거나 스크립팅 소개에 관한 수업 중 하나에 참석해야 합니다.
Re: 그래프 빌더에서 열의 변수 목록을 Y축으로 사용합니다.표시,
귀하의 솔루션에 대한 또 다른 점은 동일한 패널에 모든 변수가 아닌 별도의 패널에 각 변수를 표시한다는 것입니다. 이것이 궁극적으로 제가 원하는 것입니다.아래 코드는 내가 만들고 싶은 것을 보여줍니다.귀하의 코드를 다양하게 변경해 보았으나 소용이 없었습니다.이 작업을 수행할 수 있는 방법에 대한 제안을 제공해 주시겠습니까?감사해요.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
Graph Builder(
Fit to Window( "Off" ),
Graph Spacing( 3 ),
Variables(
X( :Weight ),
Y( :Runtime ),
Y( :RunPulse, Position( 1 ) ),
Y( :RstPulse, Position( 1 ) )
),
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Line( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 6 ) )
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
3,
Base( 0, 0, 0, Item ID( "Runtime", 1 ) ),
Base( 1, 0, 0, Item ID( "RunPulse", 1 ) ),
Base( 2, 0, 0, Item ID( "RstPulse", 1 ) )
)}
),
Dispatch(
{},
"400",
LegendBox,
{Legend Position( {3, [-1, -1, -1], 6, [0, 1, 2]} ),
Position( {-1, -1, -1, 0, 1, 2} )}
)
)
);
Re: 그래프 빌더에서 열의 변수 목록을 Y축으로 사용합니다.매우 유용한 제안을 해주신 Mark에게 감사드립니다.
대신 이 위치에서 Name Expr( var expr )을 호출하는 대신 자리 표시자 vvv처럼 보이는 것을 사용해야 하는 이유를 설명해 주실 수 있나요?이 작업을 수행하면 그래프가 생성되지 않는 것을 알 수 있지만 vvv가 필요한 이유와 변수가 일반적으로 선언되는 위치 대신 GB 명령어 끝에 실제 변수 목록을 호출하는 이유가 명확하지 않습니다.
Re: 그래프 빌더에서 열의 변수 목록을 Y축으로 사용합니다.Graph Builder 실행은 Overlay Plot 실행과 동일한 방식으로 작동하지 않습니다. 오버레이 플롯은 열 참조 또는 열 참조 목록을 허용하는 하나의 명명된 인수 Y()를 사용했습니다. 그래프 빌더는 해당 역할의 각 열에 대해 별도의 Y() 인수를 사용하여 시작됩니다. 다음은 Fitness 데이터 테이블을 기반으로 한 예입니다.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables(
X( :Weight ),
Y( :Runtime ),
Y( :RunPulse, Position( 1 ) ),
Y( :RstPulse, Position( 1 ) )
),
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 4 ) )
)
);
한 가지 접근 방식은 표현식을 사용하는 것입니다. Insert Into() 및 Substitute() 함수를 사용하면 필요한 실행 표현식을 쉽게 만들 수 있습니다.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
var expr = Expr( Variables( X( :Weight ) ) );
For( c = 1, c <= N Items( col ), c++,
y expr = Expr( Y() );
Insert Into( y expr, col[c] );
Insert Into( var expr, Name Expr( y expr) );
);
Eval(
Substitute(
Expr(
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
vvv,
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 4 ) )
)
);
),
Expr( vvv ),
Name Expr( var expr )
)
);Re: Graph Builder에서 열의 변수 목록을 Y축으로 사용훌륭한 설명 감사합니다. 저는 스크립트를 사용하기 시작하는 직원에게 대체자를 가르치려고 합니다. 이 예가 아래 섹션의 3개 그래프에 대해 하드 코딩되어 있다는 것을 알았습니다. 목록에 4번째 열을 추가하면(예: col = {:Runtime, :RunPulse, :RstPulse, :MaxPulse}) Graph Builder에서 3개의 그래프만 그립니다.
Elements(
Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 4 ) )
)
For 루프에서 이러한 표현식을 설정하는 간단한 방법이 있습니까? 새 표현식을 Elements()로 시작해야 하는지, 아니면 "var expr"과 비슷하게 Points() 표현식과 Smoother() 표현식을 조립하여 수행할 수 있는지 잘 모르겠습니다. 이걸 가지고 놀아보겠지만 Substitute가 표현식으로 볼 수 있는 다른 요령이 있는지, 아니면 표현식에서 어느 수준에서 시작하는 것이 좋은지 알고 싶었습니다. 예를 들어, var expr을 "Variables (X (:Weight))로 시작한 다음 Y를 삽입했습니다. 이게 모범 사례인가요?