JMP圖形也能有這樣的效果嗎?這就是HTML效果。
JMP graphlet能達到這樣的效果嗎?
謝謝!

自動化和腳本編寫視窗回覆:JMP圖形可以有這個效果嗎?
@hogi wrote:
我如何訪問這個命名空間?
兩個都:
Report(gb)[FrameBox(1)] << get namespace() ;
(Report(gb)[FrameBox(1)] << find seg(TopSeg (1))) << get namespace();
產生一個新的命名空間。
....我詢問了 JMP 支援:TS- 00173810
很遺憾:
你不能 使用權 這 圖形 腳本 名稱空間 外在地.
回覆:JMP圖形可以有這個效果嗎?噢,當然 - 你如何畫一個圓?
回覆:JMP圖形可以有這個效果嗎?手柄是。圓圈則不然。我*認為*非方形網格上的完美圓的半徑是在 Y 軸座標中定義的。
回覆:JMP圖形可以有這個效果嗎?有趣的。為什麼手把不綁定到 x/y 座標系?
調整繪圖大小後它仍然有效,但有明顯的偏移:
回覆:JMP圖形可以有這個效果嗎?-
回覆:JMP圖形可以有這個效果嗎?您可以使用函數參數來取代 x,y
Names Default To Here( 1 );
New Window( "Example",
trapx = 20;
trapy = 50;
handx = 70;
handy = 80;
trapcolor="blue";
handcolor="blue";
Graph Box(
Frame Size( 200, 200 ),
handle( handx, handy, // any handle(s) must come before Mousetrap
Function( {a, b}, handx=a; handy=b;
Write( Eval Insert( "\!nhand drag ^a^ ^b^" ) );
handcolor="magenta"; )
, // the mouse-up handler
Function( {a, b}, handx=a; handy=b;
Write( Eval Insert( "\!nhand release ^a^ ^b^" ) );
handcolor="cyan"; )
);
Mousetrap( // should not be more than one Mousetrap, the first one captures all clicks
Function( {a, b}, trapx=a; trapy=b;
Write( Eval Insert( "\!ntrap drag ^a^ ^b^" ) );
trapcolor="red"; )
, // the mouse-up handler
Function( {a, b}, trapx=a; trapy=b;
Write( Eval Insert( "\!ntrap release ^a^ ^b^" ) );
trapcolor="green"; )
);
// the drawing occurs outside of the mousetrap or handle
pencolor(trapcolor);
pensize(3);
Circle( {0, 0}, Sqrt( trapx * trapx + trapy * trapy ) );
pencolor(handcolor);
pensize(3);
Circle( {0, 0}, Sqrt( handx * handx + handy * handy ) );
)
);
如果您需要一個或多個句柄,它們必須出現在捕鼠器之前,因為如果沒有前一個句柄佔用,則一次單擊將被捕鼠器消耗。
回覆:JMP圖形可以產生這種效果嗎?
好的,每個 Framebox 共用命名空間-與全域命名空間分開。
- 並且與其他 FrameBox 的命名空間分開。
編輯:哇,研究結果的解讀完全錯誤。
::x= 5;
(Report( gb )<< xpath("//FrameBox")) << add graphics script(//
If(Not( Is Empty( x ) ), // if the mouse did not yet enter the graph -> do nothing.
Caption("global x is "|| Char(::X));
V Line(x+3);
)
//
);
影片結尾還有另一個發現:
重新縮放視窗會觸發圖表重置,使用這裡命名空間中的原始值。
如何進入這個命名空間?
兩個都:
Report(gb)[FrameBox(1)] << get namespace() ;
(Report(gb)[FrameBox(1)] << find seg(TopSeg (1))) << get namespace();
建立一個新的命名空間。
回覆:JMP圖形可以有這個效果嗎?我剛剛在腳本索引中找到了此資訊:

座標 x 和 y 儲存為全域變數以供腳本執行。
執行腳本後,任何預先存在的全域變數 x 和 y 都會恢復。
故事到這裡就可以結束了。
取消註釋
// x=y=60;
讓圖形以 x = 60 處的線開始。
讓我驚訝的是:
當我嘗試將線拖到另一個位置時,它起作用了!
為什麼這令人驚訝:
Here命名空間內的 x 保持在 60。 [編輯:對於全域變量,此時應「恢復」原始值:執行 MouseTrap 後]。那麼,為什麼這個腳本有效?
似乎腳本內部優先使用局部變數 x 和 y - 而不是Here命名空間中的變數。這個解釋正確嗎?
然後,歸根結底,JMP 在全域變數方面付出了額外的努力,這真是太好了。這樣,即使位於圖形腳本上下文之外的函數 (myfunctions:xy ) 也可以存取變數:)
也許有趣的是檢查:
一個 FrameBox 的圖形腳本 - 它們是否共享一個公共名稱空間,或者每個圖形腳本都使用它自己的...
回覆:JMP圖形可以有這個效果嗎?我懂了
謝謝克雷格!
回覆:JMP圖形可以有這個效果嗎?@hogi MouseTrap 在 JSL 中是一個奇怪的東西。它是一個在執行時不執行任何操作的函數,無論是否執行或(主要)它在腳本中的位置都無關緊要。當滑鼠在圖表上移動時,座標將發送到 x,y 中的腳本,需要將其複製到全域變數中,如圖所示。
手柄和各種拖曳變體都有一個與其關聯的位置,並且只有在足夠接近時才會啟動。順序確實很重要,因為腳本中遇到的第一個足夠接近的(幾個像素)將獲得更新。
我無法完全解釋為什麼它適用於您的更改。 X確實不應該存在……看來它逃脫了捕鼠器!
我在第一篇文章中修復了腳本。
回覆:JMP圖形可以有這個效果嗎?看起來像是添加懸停鑽探腳本。
For(iFrame=1,iFrame<=N Items(framelist),iFrame+=1,frame=framelist[iFrame]; Eval(Eval Expr(frame<<ADDGRAPHICSSCRIPT></ADDGRAPHICSSCRIPT>
Thanks Experts!
回覆:JMP圖形可以有這個效果嗎?@Craige_Hales ,很好,非常順利! 
幾乎太順利了:我希望這個範例不會阻止開發人員實作非 JSL 方法。
透過圖形產生器進行本機支援的一些論點:
- 讓原生圖形產生器更加強大
- 讓非 JSL 用戶也滿意
- 即使無需點擊滑鼠,也會自動顯示精美註釋
-> 允許使用者照常使用滑鼠來選擇資料點
(使用目前的“JSL”方法,可以添加一些切換按鈕來選擇正確的模式 - 就像它為維恩圖實現的那樣)
我花了一段時間才理解錯誤訊息!
Names default to here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
// x=y=60;
fb = Report( gb )[FrameBox( 1 )];
fb << addgraphicsscript(//
If(Not( Is Empty( x ) ), // if the mouse did not yet enter the graph -> do nothing.
Mousetrap("nothing to do");
V Line(x);
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - x ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( x < xmidpoint,
Text( {x + xwidth / 100, y}, "height " || Char( Round( x ) ) || "\!nmore" )//
,
Text(
right justified,
{x - xwidth / 100, y},
"height " || Char( Round( x ) ) || "\!nmore"
)
);
)
//
);
回覆:JMP圖形可以有這個效果嗎?
回覆:JMP圖形可以有這個效果嗎?
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
fb = Report( gb )[FrameBox( 1 )];
xx = yy = 0;
fb << addgraphicsscript(//
Mousetrap(
xx = x;
yy = y;
);
V Line( xx );
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - xx ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( xx < xmidpoint,
Text( {xx + xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nmore" )//
,
Text( right justified, {xx - xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nmore" )
);
//
);
編輯:第 18 行現在顯示 xx 而不是 x。一定是我的命名空間中殘留的東西。謝謝@lala @hogi
回覆:JMP圖形可以有這個效果嗎?通過(無 JSL )圖形產生器:還沒有。也許在未來的版本?
越來越多的競爭對手程式提供了這種類型的註釋,所以我猜它也會在JMP中實現。
您可以轉到新型十字線以獲得線條和更平滑類型的圖表並支持@shampton82的願望。
回覆:JMP圖形可以有這個效果嗎?通過 JSL,是的。
回覆:JMP圖形可以有這個效果嗎?稍微更改了腳本以顯示權重值而不是更多:
names default to here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
fb = Report( gb )[FrameBox( 1 )];
xx = yy = 0;
valuesMatrix = :height << Get Values; //***new*** Get column values for height
fb << addgraphicsscript(//
Mousetrap(
xx = x;
yy = y;
);
V Line( xx );
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - xx ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
valuesRows = char(:weight[loc(valuesMatrix,round(xx))]); //***new*** write to char weight values for all rows of height at position round(xx)
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( xx < xmidpoint,
Text( {xx + xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nweight " || valuesRows )////***new*** exchanged "more" with weigth and list of weight values for that location of height
,
Text( right justified, {xx - xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nweight " || valuesRows )
);
//
);
您甚至可以新增對值進行升序/降序排序。
回覆:JMP圖形可以產生這種效果嗎?嗯,我覺得我的很多結論都是錯的。
再試一次:

- 或許
並非指“運行[拖曳]腳本之後”,而是指“滑鼠抬起時”。
- 這一點非常重要。如果不需要更新框架盒 ,就不會進行更新。
所以,
- 當滑鼠移動時,新的座標會儲存到 x 和 y 座標軸。
(
?不——在 Here 命名空間中,因為我們使用了名稱預設值為 HERE (1) )
- ……而且這些值可以在 Here 命名空間內使用——甚至在捕鼠器()函數之外也可以使用。這讓@Craige_Hales感到困惑,而我則進一步陷入了這個陷阱: 製作拖放腳本
- 變數更新後,JMP 會觸發圖形腳本和目前的 x 和 y 值重新繪製框架盒。
- 其他框架框不會更新:
如果我們將滑鼠移到左側框架框中,中間的框架框不會更新——反之亦然。
這就造成了兩個獨立命名空間的假象。因此,使用者無法存取框架框的命名空間也就不足為奇了——因為根本沒有這樣的命名空間。它只是共享的這裡命名空間與本地框架框更新的組合。
- 放開滑鼠按鈕後,x 和 y
。
然而,框架框並未觸發任何更新。因此,使用者不會注意到「此處」命名空間中變數的重置。
- 當圖表下次更新時(例如調整大小或選擇一些資料點),圖形腳本再次執行,結果顯示這些值(在一段時間前)已重設。
回覆:JMP圖形可以產生這種效果嗎?gpt-5.6-luna。
讓我想起了這篇文章

不錯!
回覆:JMP圖形可以產生這種效果嗎?這真是太酷了, @Craige_Hales 、 @martindemel和@hogi 。
這是一個非常棒的功能,我完全支援在圖表建構器中原生支援類似的功能。我喜歡它能高亮顯示點擊圖表位置附近的數據點。
有沒有辦法把它「關起來」呢?點擊圖表後,那條垂直線就會一直顯示在那裡。如果能在操作完成後重置圖表就好了。而且,這個功能或許用平台原生實作比用 JSL 實作更容易。
謝謝! ,
DS
回覆:JMP圖形可以產生這種效果嗎?@SDF1謝謝!你可以為 Mousetrap 新增第二個腳本參數來偵測按鈕釋放並移除圖形腳本。第一個腳本會在滑鼠按下和每次後續滑鼠移動時呼叫。如果提供了第二個腳本,它會使用相同的參數來指示滑鼠抬起。
回覆:JMP圖形可以產生這種效果嗎?我從未想過Gemini 3.1 Pro能夠完成這部傑作。 
回覆:JMP圖形可以產生這種效果嗎?克勞德費布爾 5 