JMP 그래픽으로 이런 효과를 낼 수 있나요?이것이 HTML 효과입니다.
JMP 그래프릿으로 이런 효과를 얻을 수 있나요?
감사해요!

자동화 및 스크립팅윈도우Re: JMP 그래픽으로 이런 효과를 낼 수 있나요?
@호기 wrote:
이 네임스페이스에 어떻게 접근하나요?
둘 다:
Report(gb)[FrameBox(1)] << get namespace() ;
(Report(gb)[FrameBox(1)] << find seg(TopSeg (1))) << get namespace();
새로운 네임스페이스를 생성합니다.
... 저는 JMP 지원팀에 문의했습니다: TS- 00173810
안타깝게도:
너할 수 없다 입장 그만큼 제도법 스크립트 네임스페이스 외부적으로.
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?아야, 물론이죠. 원은 어떻게 그리나요?
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?손잡이는 그렇습니다. 원은 아닙니다. 저는 정사각형이 아닌 그리드에서 완벽하게 둥근 원은 Y축 좌표에서 반지름이 정의되어 있다고 *생각합니다*.
Re: JMP 그래픽으로 이런 효과를 낼 수 있나요?흥미롭네요. 핸들이 x/y 좌표계에 연결되지 않은 이유는 무엇인가요?
플롯 크기를 조정한 후에도 작동하지만 상당한 오프셋이 있습니다.
Re: JMP 그래픽으로 이런 효과를 낼 수 있나요?-
Re: 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 ) );
)
);
손잡이가 1개 이상 필요한 경우, 쥐덫보다 먼저 손잡이가 나타나야 합니다. 이전에 손잡이가 없으면 쥐덫이 클릭을 소모하게 됩니다.
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?
네, 프레임박스당 하나의 공유 네임스페이스를 사용 합니다. 전역 네임스페이스와는 별개입니다.
- 그리고 다른 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();
새로운 네임스페이스를 생성합니다.
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?방금 스크립팅 인덱스에서 이 정보를 찾았습니다.

좌표 x와 y는 스크립트 실행을 위한 전역 변수 로 저장됩니다.
그리고 스크립트를 실행한 후에는 기존의 전역 변수 x와 y가 복원됩니다.
이야기는 여기서 끝날 수도 있다.
주석 해제
// x=y=60;
그래프를 x = 60에서 선으로 시작하겠습니다 . -> 스크립트는 Here 네임스페이스의 로컬 변수를 사용합니다.
나를 놀라게 한 점:
선을 다른 위치로 끌어다 놓으려고 하면 제대로 작동합니다!
이것이 놀라운 이유는 무엇입니까?
Here 네임스페이스 내부의 x는 60으로 유지됩니다. 그리고 스크립트는 글로벌 네임스페이스의 변수보다 Here 네임스페이스의 변수를 선호합니다. [편집: 글로벌 변수의 경우 원래 값은 이 시점(MouseTrap 실행 후)에 "복원"되어야 합니다.] 그럼 스크립트가 작동하는 이유는 무엇일까요?!
스크립트 내부에는 Here 네임스페이스의 변수 대신 우선적으로 사용되는 로컬 변수 x & y가 있는 듯합니다. 이 해석이 맞나요?
그런 다음 줄 아래에서 JMP가 전역 변수에 대해 추가적인 노력을 기울이는 것은 매우 친절합니다. 이런 방식으로 Graphics Script(myfunctions:xy)의 컨텍스트 외부에 있는 함수도 변수에 액세스할 수 있습니다.:)
아마 확인해보는 게 흥미로울 듯:
한 FrameBox의 그래픽 스크립트 - 공통 네임스페이스를 공유하나요? 아니면 각 그래픽 스크립트가 자체 ...을 사용하나요?
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?알겠어요
고마워요 크레이그!
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?@hogi MouseTrap은 JSL에서 이상한 것입니다. 실행될 때 아무것도 하지 않는 함수이며 실행되든 안 되든 (대부분) 스크립트에서 어디에 위치하든 상관없습니다. 그래프에서 마우스가 움직이면 좌표가 x,y의 스크립트로 전송되고 표시된 대로 전역에 복사해야 합니다.
핸들과 다양한 드래그 변형은 연관된 위치를 가지고 있으며 충분히 가까울 때만 활성화됩니다. 순서는 약간 중요한데, 스크립트에서 마주친 첫 번째 변형이 충분히 가까울 때(몇 픽셀) 업데이트를 받기 때문입니다.
왜 당신의 변경 사항과 함께 작동하는지 완전히 설명할 수 없습니다. X는 실제로 존재하지 않아야 합니다... 쥐덫에서 빠져나온 것 같습니다!
첫 번째 게시물의 스크립트를 수정했습니다.
Re: JMP 그래픽으로 이런 효과를 낼 수 있나요?호버 드릴 스크립트를 추가하는 것 같습니다.
For(iFrame=1,iFrame<=N Items(framelist),iFrame+=1,frame=framelist[iFrame]; Eval(Eval Expr(frame<<ADDGRAPHICSSCRIPT></ADDGRAPHICSSCRIPT>
Thanks Experts!
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?@Craige_Hales , 훌륭하고 매우 부드럽습니다! 
너무 매끄럽기도 하다. 이 예제가 개발자들이 JSL이 아닌 방식을 구현하는 것을 막지 않기를 바란다.
Graph Builder를 통한 네이티브 지원에 대한 몇 가지 주장:
- 기본 Graph Builder를 더욱 강력하게 만듭니다.
- JSL을 사용하지 않는 사용자도 만족시키세요
- 마우스 클릭 없이도 자동으로 멋진 주석을 표시합니다.
-> 사용자가 평소처럼 마우스를 사용하여 데이터 포인트를 선택할 수 있도록 허용
(현재 "JSL" 접근 방식을 사용하면 올바른 모드를 선택하기 위해 토글 버튼을 추가할 수 있습니다. 이는 Venn 다이어그램 에 구현된 것과 같습니다.)
오류 메시지를 이해하는 데 시간이 좀 걸렸어요!
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"
)
);
)
//
);
Re: JMP 그래픽으로 이런 효과를 낼 수 있나요?
Re: 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번째 줄은 이제 x가 아니라 xx라고 합니다. 제 네임스페이스에 뭔가 남은 게 있었나 봅니다. 감사합니다 @lala @hogi
Re: JMP 그래픽으로 이런 효과를 낼 수 있나요?via ( JSL-free ) Graph Builder: 아직은 아닙니다. 향후 릴리스에서 나올 수도 있을까요?
점점 더 많은 경쟁 프로그램에서 이런 유형의 주석을 제공하고 있으므로 JMP에도 구현될 것으로 보입니다.
선과 더 부드러운 유형의 차트를 위한 새로운 유형의 크로스 헤어 로 이동하고 @shampton82 의 소원을 지지하세요.
Re: JMP 그래픽으로 이런 효과를 낼 수 있나요?JSL을 통해서라면 가능합니다.
Re: 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 )
);
//
);
값을 오름차순/내림차순으로 정렬할 수도 있습니다.
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?음, 제 결론 중 상당 부분이 틀린 것 같네요.
다시 시도해 보겠습니다.

- 어쩌면
이는 "드래그 스크립트를 실행한 후"를 의미하는 것이 아니라 "마우스 업 이벤트 발생 시"를 의미합니다.
- 그리고 아주 중요한 점입니다. 프레임박스 를 업데이트할 필요가 없으면 업데이트되지 않습니다.
그래서,
- 마우스를 움직이면 새로운 좌표가 x축과 y축에 저장됩니다.
(
아니요 - Here 네임스페이스에서는 Names 기본값을 HERE(1)로 사용했기 때문입니다.
- ...그리고 해당 값들은 쥐덫() 함수 외부에서도 Here 네임스페이스 내에서 사용할 수 있습니다. 이 점이 @Craige_Hales 님을 당황하게 했고, 저는 이 함정에 또 한 번 발을 담갔습니다: 드래그 앤 드롭 스크립트 만들기.
- 변수가 업데이트되면 JMP는 그래픽 스크립트 와 현재 x, y 값을 사용하여 프레임 박스를 다시 그리는 트리거를 받습니다.
- 다른 프레임박스는 업데이트되지 않습니다.
왼쪽 프레임 상자에서 마우스를 움직여도 가운데 프레임 상자는 업데이트되지 않으며, 그 반대의 경우도 마찬가지입니다.
이로 인해 마치 두 개의 별개 네임스페이스가 있는 것처럼 보이게 됩니다. 따라서 사용자가 프레임 박스의 네임스페이스에 접근할 수 없는 것은 당연합니다. 애초에 그런 네임스페이스가 존재하지 않기 때문입니다. 공유되는 여기 네임스페이스와 로컬 Framebox 업데이트가 결합된 형태일 뿐입니다.
- 마우스 버튼을 놓으면 x와 y 좌표가 변합니다.
.
하지만 프레임 상자의 업데이트는 발생하지 않습니다. 따라서 사용자는 ' 여기 ' 네임스페이스의 변수가 재설정되었음을 알아차리지 못합니다.
- 그래프가 다음에 업데이트될 때(예: 크기 조정 또는 일부 데이터 포인트 선택) 그래픽 스크립트가 다시 실행되어 값이 (꽤 오래 전에) 초기화되었음을 보여줍니다.
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?gpt-5.6-루나.
이 게시물을 다시 떠올리게 해주세요

나쁘지 않네요!
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?이거 정말 멋지네요, @Craige_Hales , @martindemel , @hogi 님 .
정말 유용한 기능이고, 그래프 빌더에 이런 기능이 기본적으로 포함되기를 적극 권장합니다. 그래프를 클릭한 위치 주변의 데이터 포인트를 강조 표시해 주는 방식이 마음에 듭니다.
이 기능을 끌 수 있는 방법이 있을까요? 그래프를 클릭하면 세로선이 계속 표시되고 사라지지 않습니다. 사용이 끝나면 그래프를 초기화할 수 있으면 좋겠습니다. 이 기능은 JSL을 사용하는 것보다 플랫폼 자체 기능으로 구현하는 것이 더 쉬울 수도 있습니다.
감사해요!,
DS
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?@SDF1 감사합니다! 마우스 트랩에 두 번째 스크립트 인수를 사용하면 버튼 해제를 감지하고 그래픽 스크립트를 제거할 수 있습니다. 첫 번째 스크립트는 마우스 다운 및 이후 마우스 움직임마다 호출됩니다. 두 번째 스크립트가 제공되면 동일한 매개변수로 호출되어 마우스 업을 나타냅니다.
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?저는 Gemini3.1 Pro가 이 걸작을 완성할 수 있을 거라고는 전혀 예상하지 못했습니다. 
Re: JMP 그래픽이 이런 효과를 낼 수 있나요?클로드 페이블 5 