任何人都有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼?大家好,
我想知道是否有人可以使用一些 JSL 代碼或加載項來繪製圖形生成器 (GB) 繪圖並將其平方(將 x 軸和 y 軸設置為相同)並添加一條 45 度線,就像預測圖的實際情況一樣,請參見下面的示例。

據我所知,GB 沒有任何類型的選項可以自動為您執行此操作,這太糟糕了,因為我經常喜歡製作類似預測圖的實際圖表,並且具有 GB 平台添加顏色的附加多功能性或其他類型的圖形格式。
也許這可能是 GB 中新功能的願望清單?
謝謝!,
DS
圖形回复:有人有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼嗎?你好@txnelson ,
感謝您的快速回復和提示。 由此,我還找到了您之前提供給另一個希望對窗口和報告執行類似操作的用戶的解決方案這裡.
添加這行簡單的代碼讓我可以繼續編輯和修改當前的圖形生成器報告。
gb=Current Report()[outlinebox(1)]<<GET scriptable="" object=""></GET>
謝謝您的幫助!,
DS
回复:有人有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼嗎?在腳本索引中查找關於
當前報告()
功能
回复:有人有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼嗎?你好@txnelson , @Craige_Hales , 和@David_Burnham ,
再次感謝您之前的幫助。 我希望你能在這個副項目的另一個方面幫助我。
正如我在上次回復中提到的,我想以一種工具欄熱按鈕項的方式實現這一點,我組織中的用戶可以將其“安裝”在他們的 JMP 中,例如插件。 那部分我知道該怎麼做。 我堅持的是如何將現有的打開窗口視為報告,以便您可以像本文上面的代碼一樣對其進行操作。
例如,用戶打開 Big Class.jmp 文件,然後手動開始使用圖形生成器繪製身高與體重的關係圖。 這將在名為 Big Class - Graph Builder 的 Big Class 數據表下打開一個子窗口。 我知道如何獲取窗口名稱等等,但與前面的代碼不同,我沒有以下內容
gb = dt << Graph Builder( Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 4 ) ) )
);所以我不能使用 Report (gb) 引用 gb,它在 Craige 的示例代碼中用於以下操作:
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(Y Function(x,x), Pen Color("blue"));
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "red" );
Pen Size( 3 );
Line Style( "dotted" );
Line( {xmin, ymin}, {xmax, ymax} );// the diagonal
);在這種編碼中,很容易引用報告gb,因為您在執行gb = dt << Graph Builder(.....)時將命令發送到數據表。 就我而言,我不會這樣做,因為用戶是手動執行此操作(使用他正在創建的任何圖形)。
我想製作一個可以按下的工具欄熱按鈕,然後代碼獲取當前的 Graph Builder 窗口名稱(以防為該數據表打開多個 Graph Builder 實例),然後執行平方化和對角線化之前解決的線。 我對如何從窗口名稱到將其分配為報告感到困惑,以便所有其他代碼都可以工作。
提前謝謝了!,
DS
回复:有人有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼嗎?你好@txnelson , @Craige_Hales , @David_Burnham , 和@馬克貝利,
感謝您對此的反饋和意見,我真的很感激。 我喜歡這兩個版本的原因各不相同,我喜歡使用 Jim 和 Craige 的方法修改線條樣式的其他方法,但也喜歡 David 和 Mark 的簡化函數樣式。 我可以看到這兩種方法因不同的原因和受眾而具有價值。
我將採納您的建議並弄清楚如何編寫 JSL,以便將其添加為工具欄熱按鈕,以便我可以將其分發給我組織中的其他人。
謝謝!,
DS
回复:有人有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼嗎?添加到@David_Burnham的版本,很多人沒有意識到您不需要運行腳本來將圖形腳本添加到圖(框框)。 你可以交互完成一樣的東西。 右鍵單擊繪圖框並選擇自定義。 單擊添加按鈕 (+),然後輸入表達式 Y Function( x, x )。 這個常用表達式甚至還有一個宏。 這種方式現在可能不是您的最佳方式,但我希望您了解它作為替代方案。
回复:有人有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼嗎?添加對角線的另一種方法是添加函數線 y=x:
report(gb)[FrameBox(1)] << add graphics script(
Y Function( x, x )
)
回复:有人有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼嗎?這是一個變體,假設您不會在繪製圖形後調整圖形大小或調整軸。 Jim 的版本在每次重繪圖形時重置方形度,這可能會觸發圖形的另一次重繪。 如果您真的需要它,可能需要使用調度程序在圖形腳本之外重置方形度。
dt = Open( "$sample_data/big class.jmp" );
gb = dt << Graph Builder( Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
Report( gb )[framebox( 1 )] << FrameSize( 500, 500 ); //force square
// fix JSL here to set the axis ranges the way you expect.
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
// add the diagonal line
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "red" );
Pen Size( 3 );
Line Style( "dotted" );
Line( {xmin, ymin}, {xmax, ymax} );// the diagonal
);
Corner-to-corner diagonal added by script.Corner-to-corner diagonal added by script.腳本添加的角對角對角線。
你可能真的不想要 red,3,dotted!
回复:有人有添加 45 度線和平方 GB 圖的加載項或 JSL 代碼嗎?這是一個簡單的腳本,它維護一個帶有對角線的正方形顯示。編寫代碼是為了有希望地顯示所有正在發生的事情。可以編寫更高效的代碼。
Names Default To Here( 1 );
dt = Current Data Table();
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 8 ) ) )
);
rpt = Current Report();
xmax = rpt[axisbox( 1 )] << get max;
ymax = rpt[axisbox( 2 )] << get max;
xmin = rpt[axisbox( 1 )] << get min;
ymin = rpt[axisbox( 2 )] << get min;
rpt[axisbox( 1 )] << Min( Min( ymin, xmin ) );
rpt[axisbox( 1 )] << Max( Max( ymax, xmax ) );
rpt[axisbox( 2 )] << Min( Min( ymin, xmin ) );
rpt[axisbox( 2 )] << Max( Max( ymax, xmax ) );
rpt[framebox( 1 )] << add graphics script(
xmax = rpt[axisbox( 1 )] << get max;
ymax = rpt[axisbox( 2 )] << get max;
xmin = rpt[axisbox( 1 )] << get min;
ymin = rpt[axisbox( 2 )] << get min;
rpt[axisbox( 1 )] << Min( Min( ymin, xmin ) );
rpt[axisbox( 1 )] << Max( Max( ymax, xmax ) );
rpt[axisbox( 2 )] << Min( Min( ymin, xmin ) );
rpt[axisbox( 2 )] << Max( Max( ymax, xmax ) );
theMinLineList = {};
theMaxLineList = {};
Insert Into( theMinLineList, Min( ymin, xmin ) );
Insert Into( theMinLineList, Min( ymin, xmin ) );
Insert Into( theMaxLineList, Max( ymax, xmax ) );
Insert Into( theMaxLineList, Max( ymax, xmax ) );
Line( theMinLineList, theMaxLineList );
xx = rpt[framebox( 1 )] << get size;
Show( xx );
xx[1] = Max( xx );
xx[2] = Max( xx );
rpt[framebox( 1 )] << framesize( xx[1], xx[2] );
);