こんにちは、Graph Builder オブジェクトで Local Data Filter を使用するスクリプトがあります。 ローカル データ フィルターで選択を切り替えると、グラフに別の線を描画する関数を作成しました。 グラフ ビルダー ウィンドウでは問題なく動作していますが、新しいウィンドウまたは JMP アプリに配置しようとすると、関数が無視され、線が描画されません。
理由を知っている人はいますか?
編集:コードに参加しました。
gb = dt << Graph Builder(
Size( 865, 775 ),
Show Control Panel( 0 ),
Fit to Window( "Off" ),
Variables( X( :TIME_col ), X( :col2 ), Y( :col1 ), Y( :col2 ), Group X( :group_leg ), Overlay( :leg_col ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 36 ) ), Smoother( X, Y, Legend( 48 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 38 ) ), Smoother( X, Y, Legend( 49 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 40 ) ), Line Of Fit( X, Y, Legend( 24 ), R²( 1 ) ) ),
Elements( Position( 2, 2 ), Points( X, Y, Legend( 42 ) ), Smoother( X, Y, Legend( 51 ) ) ),
);
ldf = gb << Local Data Filter(
Add Filter(
columns( :leg_col, :group_col ),
Display( :leg_col, Size( 160, 60 ), List Display ),
Display( :group_col, Size( 160, 60 ), List Display ),
Order By Count( :group_col )
)
);
cso1 = gb << Column Switcher( :leg_col, legend_cls ); // legend_cls is list of cols
cso2 = gb << Column Switcher( :col1, num_cls ); // num_cls is list of cols
cso3 = gb << Column Switcher( :col2, num_cls );
cso4 = gb << Column Switcher( :TIME_col, time_cls );// time_cls is list of cols
cso1 << Set Size( 200 );
cso1 << Set NLines( 6 );
cso2 << Set Size( 200 );
cso2 << Set NLines( 15 );
cso3 << Set Size( 200 );
cso3 << Set NLines( 15 );
cso4 << Set Size( 200 );
cso4 << Set NLines( 10 );
// Row state handler function
doSomethingWithSelection = Function( {x},
{Default Local},
currentScript = ldf << getScript;
Clear Log();
str = Char( Name Expr( currentScript ) );
prodi = Left( Substr( str, Contains( str, "Where(:Prod == " ) + 16 ), 4 );
response = cso2 << Get current;
predictor = cso3 << Get Current;
// dt_lims is data table of control limits
TR1_row = dt_lims << get rows where( :Label == response & :Prod == prodi );
::TR_res = Column( dt_lims, "CL" )[TR1_row];
Try( gbreport[FrameBox( 1 )] << Add Graphics Script( H Line( TR_res ) ) );
TR2_row = dt_lims << get rows where( :Label == predictor & :Prod == prodi );
::TR_pred = Column( dt_lims, "CL" )[TR2_row];
Show( TR_pred );
Try( gbreport[FrameBox( 2 )] << Add Graphics Script( H Line( TR_pred ) ) );
);
// Get a reference to the report
gbReport = Report( gb );
// Assign the row state handler to the local data filter display box
rsh1 = gbReport[Outline Box( 1 )] << MakeRowStateHandler( doSomethingWithSelection );
私の推測では、Frame Box() への相対参照を使用しており、それが追加のオブジェクト (新しいウィンドウ) にカプセル化されると、参照は無効になります。
他のことが起こっている可能性があるため、コードの詳細、またはさらに良いのはコード自体を提供できると非常に役立ちます.