嗨,我有一個在 Graph Builder 對像中使用本地數據過濾器的腳本。 當我在本地數據過濾器中切換選擇時,我編寫了一個函數在圖表中繪製不同的線。 它在 Graph Builder 窗口中工作正常,但如果我嘗試放入新窗口或 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() 的相對引用,並且當它封裝到附加對象(新窗口)中時,該引用不再有效。
其他事情可能正在發生,因此如果您可以提供更多代碼細節,甚至更好的是代碼本身,這將非常有幫助。