cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Choose Language Hide Translation Bar
View Original Published Thread

Can JMP graphics have this effect?

lala
Level VIII

This is the HTML effect.
Can JMP graphlet achieve this effect?

Thanks!

test.gif

2 ACCEPTED SOLUTIONS

Accepted Solutions
Craige_Hales
Super User

Re: Can JMP graphics have this effect?

 


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" )
	);
	//	
);

edit: Line 18 now says xx rather than x. Must have been something left over in my namespace. Thanks @lala  @hogi 

mousetrap.mp4
Video Player is loading.
Current Time 0:00
Duration 0:13
Loaded: 0%
Stream Type LIVE
Remaining Time 0:13
 
1x
    • Chapters
    • descriptions off, selected
    • captions off, selected
    • default, selected
    (view in My Videos)

    Craige

    View solution in original post

    Re: Can JMP graphics have this effect?

    Slightly changed the script to display weight values instead of more:

     

    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 )
    	);
    	//	
    );

    you may even could add sorting the values ascending/descending. 

    hoverline.mp4
    Video Player is loading.
    Current Time 0:00
    Duration 0:08
    Loaded: 0%
    Stream Type LIVE
    Remaining Time 0:08
     
    1x
      • Chapters
      • descriptions off, selected
      • captions off, selected
      • default, selected
      (view in My Videos)

      /****NeverStopLearning****/

      View solution in original post

      17 REPLIES 17
      hogi
      Level XII


      Re: Can JMP graphics have this effect?

      via JSL, yes.

      hogi
      Level XII


      Re: Can JMP graphics have this effect?

      via (JSL-free) Graph Builder: not yet. Maybe in a future release?

      More and more competitor programs provide this type of annotations, so I guess it will also be implemented in JMP.

      You can go to New type of cross hair for line and smoother type charts and support @shampton82 's  wish.

      Craige_Hales
      Super User

      Re: Can JMP graphics have this effect?

       

      
      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" )
      	);
      	//	
      );

      edit: Line 18 now says xx rather than x. Must have been something left over in my namespace. Thanks @lala  @hogi 

      mousetrap.mp4
      Video Player is loading.
      Current Time 0:00
      Duration 0:13
      Loaded: 0%
      Stream Type LIVE
      Remaining Time 0:13
       
      1x
        • Chapters
        • descriptions off, selected
        • captions off, selected
        • default, selected
        (view in My Videos)

        Craige
        lala
        Level VIII


        Re: Can JMP graphics have this effect?

        2024-11-10_19-28-58.png

        hogi
        Level XII


        Re: Can JMP graphics have this effect?

        @Craige_Hales , nice, very smooth! : )

        Almost too smooth: I hope this example will not stop the developers from implementing a non-JSL approach.
        some arguments for a native support via Graph Builder:

        - make native Graph Builder more powerful

        - make the non-JSL users happy as well

        - show the automatic fancy annotations even without mouse clicks
          ->  allow the users to use the mouse as usual to select data points
           (with the current "JSL" approach, one might add some toggle buttons to choose the correct mode - like it's implemented for Venn Diagram )

         

        It took me a while to understand the error message!

        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"
        			)
        		);
        	)
        	//	
        );

         

        Craige_Hales
        Super User


        Re: Can JMP graphics have this effect?

        @hogi MouseTrap is a strange thing in JSL. It is a function that does nothing when executed and doesn't matter if it is executed or not or (mostly) where it is positioned in the script. When a mouse move happens on the graph, the coordinates are sent to the script in x,y which need to be copied into globals as shown.

        Handle, and the various Drag variants, have a position associated with them and will only activate if close enough. The order does matter, a little, because the first one encountered in the script that is close enough (a few pixels) will get the update.

        I can't fully explain why it works with your change. X really shouldn't exist... it appears it escapes the mousetrap!

        I repaired the script in my first post.

        Craige
        lala
        Level VIII


        Re: Can JMP graphics have this effect?

        I SEE

        • Hold down the left button to move automatically change.

        Thank Craige!

        hogi
        Level XII


        Re: Can JMP graphics have this effect?

        I just found this information in the Scripting Index:

        hogi_0-1731245964407.png

         

         

         

         

        the coordinates x and y are stored as global variables for the execution of the script.

        And any pre-existing global variables x & y are restored after executing the script.

        Here is where the story could end.

         

        Uncommenting the 

        // x=y=60;

        lets the graph start with a line at x = 60. -> the script uses the local variable from the Here namespace.
        What surprised me:
        When I try to drag the line to another location, it works!

        Why is this surprising:
        x inside the Here namespace stays at 60. And the script will prefer the variables from the Here namespace over the variables from the global namespace. [Edit: for the global variables the original values should be "restored" at this point of time: after executing MouseTrap]. So, why does the script work ?!

        Seems that inside the script there are local variable x & y which are preferentially used - instead of the variables from the Here namespace. It this interpretation correct? 


        Then, under the line, it's very kind that JMP does the extra effort with the global variables. This way even functions which live outside of the context of the Graphics Script (myfunctions:xy ) can access the variables

         

        maybe interesting to check:
        Graphics scripts of one FrameBox - do they share a common namespace or does every graphics script use it's own ...

        hogi
        Level XII


        Re: Can JMP graphics have this effect?

        Ok, ONE shared Namespace per Framebox - separate from the global Namespace

        - and separate from the Namespace of the other FrameBoxes.

         

        How do I access this namespace?

        Both:

        Report(gb)[FrameBox(1)]  << get namespace() ;
        (Report(gb)[FrameBox(1)] << find seg(TopSeg (1))) << get namespace();

        produce a new namespace.



        Another finding - at the end of the video:
        rescaling the window triggers a reset of the plot with the original values from the Here namespace.

        ::x= 5;
        (Report( gb )<< xpath("//FrameBox")) << addgraphicsscript(//
        	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);
        	)
        	//	
        );



        MouseTrap.mp4
        Video Player is loading.
        Current Time 0:00
        Duration 0:12
        Loaded: 0%
        Stream Type LIVE
        Remaining Time 0:12
         
        1x
          • Chapters
          • descriptions off, selected
          • captions off, selected
          • en (Main), selected
          (view in My Videos)