Subscribe Bookmark RSS Feed

Shared Column Switcher for multiple graphs

ku8809no

Occasional Contributor

Joined:

Jul 3, 2017

Is there any way to have one shared column switcher for multiple graphs?

 

For example, I would like to have 1 column switcher to view two different variability charts...


Thank you for your help in advance.

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson

Super User

Joined:

Jun 22, 2012

Solution

Here is a script that works on JMP 13

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
nw = New Window( "test",
	ob = Outline Box( "Var Charts",
		MyHLB = H List Box(
			vc = Variability Chart( Y( :BP 8M ), X( :Subject ), Std Dev Chart( 0 ) ),
			vc2 = Variability Chart( Y( :BP 8M ), X( :Subject ), Std Dev Chart( 0 ) )
	
		)
	)
);
cs = vc << Column Switcher( :BP 8M, {:BP 8M, :BP 12M, :BP 6M, :BP 8W, :BP 12W, :BP 6W, :BP 8F, :BP 12F, :BP 6F} );

nw["Var Charts"][listboxbox(1)] << set script(
	VarList = {:BP 8M,:BP 12M,:BP 6M,:BP 8W,:BP 12W,:BP 6W,:BP 8F,:BP 12F,:BP 6F};
	CurVar = word(2,char(vc2<<get script),":)");
	Eval( 
		Substitute( 
			Expr( cs2 = vc2 << Column Switcher( __CurVar__, varlist ) 
			), 
			Expr( __CurVar__ ), Parse( ":" || CurVar ) 		
		) 	
	);
	SwitchVar = Char((nw["Var Charts"][listboxbox(1)] << get selected)[1]);
	For(i=1,i<=N items(VarList),i++,
		If(SwitchVar==Char(VarList[i]),
			Break()
		)
	);
	nw["Var Charts"][listboxbox(2)]<<set selected(i);
	cs2 << remove column switcher;
);

I tested it on JMP 11.1, and it works only for the first selection, then the link to the second Variability Chart gets lost.  I assume this is a JMP bug that was fixed in JMP 12 or 13.  However, all is not lost.  What you can do, is to change my code to not generate a second Column Switcher and then use it to change the second chart, but instead, to delete the VC2 object completly, and then rebuild the chart and to append it to the MyHLB object.

Jim
7 REPLIES
txnelson

Super User

Joined:

Jun 22, 2012

The answer is, probably. There is typically a trigger that can be used to determine that something has changed within the first platform, based upon the column switcher, and from that, JSL can be then used to change the columns in the other platforms. If you can provide what JMP platforms you are looking to be using, then the potential triggers can be looked into.
Jim
ku8809no

Occasional Contributor

Joined:

Jul 3, 2017

Thanks Jim..
I am not 100% clear what you mean by "platforms". I am using JSL scripts to plot two variability charts. I was able to add two column switcher to both variability charts (1 each), but I would like to have just one that controls both charts.

V List Box(
dt = Variability Chart(Set Title("Variability Chart 1"),Y(:colA),X(:colB)), dt = Variability Chart(Set Title("Variability Chart 2"),Y(:colA),X(:colB)))
ku8809no

Occasional Contributor

Joined:

Jul 3, 2017

also, i am using JMP 11.1 on Window
txnelson

Super User

Joined:

Jun 22, 2012

Solution

Here is a script that works on JMP 13

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
nw = New Window( "test",
	ob = Outline Box( "Var Charts",
		MyHLB = H List Box(
			vc = Variability Chart( Y( :BP 8M ), X( :Subject ), Std Dev Chart( 0 ) ),
			vc2 = Variability Chart( Y( :BP 8M ), X( :Subject ), Std Dev Chart( 0 ) )
	
		)
	)
);
cs = vc << Column Switcher( :BP 8M, {:BP 8M, :BP 12M, :BP 6M, :BP 8W, :BP 12W, :BP 6W, :BP 8F, :BP 12F, :BP 6F} );

nw["Var Charts"][listboxbox(1)] << set script(
	VarList = {:BP 8M,:BP 12M,:BP 6M,:BP 8W,:BP 12W,:BP 6W,:BP 8F,:BP 12F,:BP 6F};
	CurVar = word(2,char(vc2<<get script),":)");
	Eval( 
		Substitute( 
			Expr( cs2 = vc2 << Column Switcher( __CurVar__, varlist ) 
			), 
			Expr( __CurVar__ ), Parse( ":" || CurVar ) 		
		) 	
	);
	SwitchVar = Char((nw["Var Charts"][listboxbox(1)] << get selected)[1]);
	For(i=1,i<=N items(VarList),i++,
		If(SwitchVar==Char(VarList[i]),
			Break()
		)
	);
	nw["Var Charts"][listboxbox(2)]<<set selected(i);
	cs2 << remove column switcher;
);

I tested it on JMP 11.1, and it works only for the first selection, then the link to the second Variability Chart gets lost.  I assume this is a JMP bug that was fixed in JMP 12 or 13.  However, all is not lost.  What you can do, is to change my code to not generate a second Column Switcher and then use it to change the second chart, but instead, to delete the VC2 object completly, and then rebuild the chart and to append it to the MyHLB object.

Jim
ku8809no

Occasional Contributor

Joined:

Jul 3, 2017

Jim, Thank you so much. Let me work on this and i will let you know how your suggested workaround turns out!

ku8809no

Occasional Contributor

Joined:

Jul 3, 2017

Jim,

Thanks to your huge help, I was able to resolve the issue.
Rather than using your suggested workaround, I resolved the issue by addressing the bug directly.
Based on the error messaged, it looked to me that the bug on JMP11 was that the scriptable object gets "deleted" when you use Column Switcher.
So i just added readdressing line to reassign the object to the object name after the column has been switched.

For example,

nw["Var Charts"][listboxbox(2)]<<set selected(i);
vc2 =nw["Var Charts"][outline box("chart name")] << Get scriptable object;
cs2 << remove column switcher;
txnelson

Super User

Joined:

Jun 22, 2012

Brilliant!

Jim