通過按鍵切換圖形生成器中主要網格線的可見性我想配置一個加載項來切換圖形生成器中主要網格線(X 和 Y)的可見性,但我正在努力處理 JSL 部分......我有 GB 對象和 SendToReport( .. 調度...代碼,但它似乎想要與 X 和 Y 軸關聯的變量名稱,而我的外接程序不知道這些是什麼。
這可行嗎?
這是我到目前為止所擁有的:
// steps to get last_gb scriptable object...<BR /><BR />// send setting change<BR />last_gb << SendToReport(
Dispatch(
{},
"myXaxis",
ScaleBox,
{ Label Row (Show Major Grid( not(Label Row (Show Major Grid ) ) ) ) ) }
),
Dispatch(
{},
"myXYaxis",
ScaleBox,
{ Label Row (Show Major Grid( not(Label Row (Show Major Grid ) ) ) ) ) }
)
)數據探索和可視化回复:通過按鍵切換圖形生成器中主要網格線的可見性你好@BHarris ,
使用軸框來顯示主網格怎麼樣?
如果你想使用send來報告消息,一種想法是使用getvariable消息來獲取變量。
// #1 Example for Axis Box
gb_rpt = gb_ob << Report();
gb_rpt[axis box( 1 )] << Show Major Grid( 1 );
gb_rpt[axis box( 2 )] << Show Major Grid( 1 );
// #2 Example for send to report
var1 = gb_ob << Get Variable( 1 );
var2 = gb_ob << Get Variable( 2 );
Eval(
Substitute(
Expr(
gb_ob << send to report(
Dispatch(
{},
_var_,
ScaleBox,
{Label Row( Show Major Grid( 1 ) )}
)
)
),
Expr( _var_ ), Eval( Char( var1[1] ) )
)
);
我希望它能解決你的問題。
回复:通過按鍵切換圖形生成器中主要網格線的可見性這已經非常接近了!我希望腳本在運行時打開和關閉網格狀態,但這只能打開網格。我只花了大約一個小時試圖弄清楚如何從 AxisBox 讀取網格狀態,但是當我深入到“標籤行”時,文檔變得非常稀疏......
如何讀取主電網的當前狀態?
回复:通過按鍵切換圖形生成器中主要網格線的可見性可能有更好的方法,但您可以嘗試的一個選擇是將 << get 腳本發送到 axisbox 並從中獲取顯示主要網格。 如果根本不可見,那麼您應該能夠從用戶屬性中獲取值
axis_script = axisbox << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"];
Print("Grid");
, // not found
Arg(Arg(Get Preference(Major Grid Lines)));
Print("Preference");
);
回复:通過按鍵切換圖形生成器中主要網格線的可見性更近了!現在,它關閉第一個 x 軸和第一個 y 軸框的網格線,但不是多軸圖上的所有軸框:

如何迭代所有軸框?這是我到目前為止所擁有的:
Names Default To Here( 1 );
win = Get Window List();
//Find graph builder windows
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
gb_rpt = gb << Report();
gb_axis1 = gb_rpt[AxisBox( 1 )];
gb_axis2 = gb_rpt[AxisBox( 2 )];
axis_script = gb_axis1 << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"], // not found
Arg( Arg( Get Preference( Major Grid Lines ) ) )
);
If( cur_gridValue,
gb_axis1 << Show Major Grid( 0 );
gb_axis2 << Show Major Grid( 0 );
,
gb_axis1 << Show Major Grid( 1 );
gb_axis2 << Show Major Grid( 1 );
);(詩。我永遠不會自己弄清楚“get script”或“arg( arg(”)。我覺得我是一個有 25 年經驗的半稱職的腳本編寫者,但我仍然對 JSL 感到很迷失——很多時候很難說出它在做什麼。)
回复:通過按鍵切換圖形生成器中主要網格線的可見性您可以使用 << XPath 獲取所有 AxisBox 引用,然後循環遍歷它們並一一修改它們,或者向所有引用發送相同的消息。 這可能需要一些額外的檢查,以免修改您不想更改的任何軸箱。
axisboxes = gb_rpt << XPath("//AxisBox");
<< 當您檢查 AxisBox 中是否有任何特定內容可以幫助您縮小引用範圍(charID 可能是一個)時,獲取 XML 可能會有所幫助。 然後,您可以修改 XPath 查詢以使用它並使其更加準確。

回复:通過按鍵切換圖形生成器中主要網格線的可見性就這樣做到了!對於需要腳本來打開/關閉圖形生成器中所有繪圖中的網格線的任何人來說,這是解決方案:
Names Default To Here( 1 );
win = Get Window List();
//Find graph builder windows
graphs = Filter Each( {w}, win,
If( Length( w << XPath( "//OutlineBox[@helpKey='Graph Builder']" ) ) > 0,
1,
0
)
);
gb = graphs[N Items( graphs )][Outline Box( "Graph Builder" )] << Get Scriptable Object;
gb_rpt = gb << Report();
gb_axis1 = gb_rpt[AxisBox( 1 )];
axis_script = gb_axis1 << get script();
cur_gridvalue = Try(
axis_script["Label Row"]["Show Major Grid"], // not found
Arg( Arg( Get Preference( Major Grid Lines ) ) )
);
axisboxes = gb_rpt << XPath( "//AxisBox" );
For Each( {anAxisBox,anIndex}, axisboxes,
If( cur_gridValue,
anAxisBox << Show Major Grid( 0 ),
anAxisBox << Show Major Grid( 1 )
)
);感謝 Jarmo 和 Yuichi 的幫助!
******************************************
附註我根本不理解“<< Get XML”提示——我嘗試將它放在 4 個不同的位置,但從未得到任何帶有“”的 XML(儘管我確實得到了很多 XML ...... .)。您是如何將 JSL 腳本學得如此出色的?
回复:通過按鍵切換圖形生成器中主要網格線的可見性我只是通過編寫腳本來學習腳本(我編寫腳本的方式是嘗試很多不同的東西,閱讀文檔(對於 JSL 通常按此順序:腳本索引、腳本指南、JMP 社區、JSL 語法參考)並嘗試更多的東西,失敗了很多,但最終我幾乎總是設法得到某種可行的解決方案)。
我認為您可以將 << get xml 發送到 jmp 對象的分析層或報告層。 有時,您甚至可以通過首先添加下標然後使用 << get xml 來更接近正確的引用,但在這種情況下,我只是將其發送到 gb。 下面是 Big Class.jmp 的其他示例,之後我將其放入您的腳本中。 通常我清除日誌,運行 << get xml line,單擊日誌,然後使用 ctrl+f 搜索某些內容(如果我知道我在尋找什麼)。 如果您必須探索一些非常大的 XML,將 xml 保存為 .xml 文件並使用某些具有 xml 語法突出顯示功能的應用程序打開它可能會有所幫助(notepad++ 通常就足夠了)。

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Select Rows([1, 2]) << Hide and Exclude(1) << Clear Select;
gb = dt << Graph Builder(
Size(528, 456),
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Smoother(X, Y, Legend(10)))
);
// Report(gb) << Get Xml; // works also on report
gb << Get XML; // run just this line to see xml in log or use Write() (write is the cleanest option)
// Write(gb << Get XML);
// xml_str = gb << get xml;
// show(xml_str);
where_tb = Report(gb) << XPath("//TextBox[contains(text(), 'Where(')]");
where_tb << Text Color("Blue"); // usually used to hide where text << Set Visibility("Collapse");
這裡是我將 << Get XML 放入腳本中的位置,運行一次,檢查 xml,然後從代碼中刪除該行,因為通常沒有必要將 << Get XML 留給現成的腳本。
