dynamically change Dispatch() options sent to GraphBuilderI am needing to change some of the options sent to the Graph Builder depending on the options in the script. I can't figure out how to get it to work.
This script works to make the graph Scale("Log"), Format("Engineering", 12):
Graph Builder(
Variables(
X( :Split ),
X( :Wafer, Position( 1 ) ),
Y( As Column( analysisTests[i] ) ),
Color( :Split )
),
Elements(
Points( X( 1 ), X( 2 ), Y, Legend( 21 ) ),
Box Plot( X( 1 ), X( 2 ), Y, Legend( 22 ) )
),
SendToReport(
Dispatch(
{},
analysisTests[i],
ScaleBox,
{Scale("Log"), Format("Engineering", 12)}
),
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( title )}
)
)
)
But when I try and send that information like this it doesn't work, even though it looks the same to me:
ScaleboxVariables = {};<BR />if(log != 0,
ScaleboxVariables = Insert(ScaleboxVariables, Expr(Scale("Log")) );
ScaleboxVariables = Insert(ScaleboxVariables, Expr(Format( "Engineering", 12 )) );
);
Dispatch(
{},
analysisTests[i],
ScaleBox,
ScaleboxVariables
),
Any help with this would be appreciated!
Mass CustomizationRe: dynamically change Dispatch() options sent to GraphBuilderThanks Mark, that was very helpful. I have been building the graphs I need in graph builder, then copying the script JMP generates for it and then editing that with my own variables and just not getting it to work. Your solution worked great and helped me understand the process better for all the different changes I want to implement.Re: dynamically change Dispatch() options sent to GraphBuilderTwo terms
- platform object: the logic behind graph builder. It is not visible.
- report surface display box tree: the output from graph builder. A visible graph, sliders, buttons.
Mark is correct; the dispatch syntax was created for machines, not humans. The Dispatch message contains information the platform object uses to find a display box in the report. If you need to use it, the SendToReport dispatches must be sent like this:
dt = Open( "$sample_data/big class.jmp" );
gb = dt << Graph Builder(
Size( 512, 442 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
// SendToReport(
// Dispatch( {}, "weight", ScaleBox, {Scale( "Log" ), Format( "Best", 6 ), Min( 60 ), Max( 200 ), Inc( 1 ), Minor Ticks( 1 )} ),
// Dispatch( {}, "height", ScaleBox, {Format( "Engineering", 12 )} )
// )
);
newFormat = {"Percent", "Engineering", "Best"};
newScale = {"Linear", "Log", "Linear"};
newInc = {10, 1, 20};
For( i = 1, i <= N Items( newFormat ), i += 1,
Wait( 1 ); // wait only needed for the demo!
gb << Dispatch( {}, "weight", ScaleBox, {Scale( newScale[i] ), Format( "Best", 6 ),
Min( 60 ), Max( 200 ), Inc( newInc[i] ), Minor Ticks( 0 )} );
gb << Dispatch( {}, "height", ScaleBox, {Format( newFormat[i], 12 )} );
);gb is the platform object that the < message is sent to. Don't send the < message to the report surface. SendToReport(...) is telling the platform object to dispatch messages into the report tree.
Mark suggests using
gb rep = gb << Report;
gb rep[AxisBox(2)] << Format( Engineering, 12 );
In all of the above, gb is the graph builder platform object. In Mark's example, gb rep is the display box report tree that belongs to the graph builder platform object. Sending the < message to the gb platform object retrieves the root of the display box tree (the report surface, the visible part). Subscripting the root returns a more specific subtree of the display box tree:
gb rep[AxisBox(2)]
That's what Mark wants to send the Format message to. One way to get that subscript is using Show Tree Structure.
Show Tree Structure: right-click on the open-close triangle.Show Tree Structure: right-click on the open-close triangle.Show Tree Structure: right-click on the open-close triangle.
The report and the tree structure windows are linked; I clicked on the height axis. The height axis and its info in the tree structure both high-lighted. AxisBox(2) is the second axis box in the report.
Re: dynamically change Dispatch() options sent to GraphBuilderTo add to @Mark_Bailey all of the messages and functions that can be passed to the various display objects in the output from JMP platforms are described with examples in the Scripting Index. . The output from the various JMP Platforms are displayed in structures filled with objects, called Display Trees. Therefore, I also suggest that you read the section in the Scripting Guide on Display Trees. It will open a whole new world of the marvelous things one is able to do with the output from JMP Platforms.
Re: dynamically change Dispatch() options sent to GraphBuilderAs I have said in answer to many other discussions here, the Send to Report argument was developed so that JMP can save customizations when you save a script. It was not developed for us. There are better ways. Send the Format message directly to the axis box. Like this:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
);
gb rep = gb << Report;
gb rep[AxisBox(2)] << Format( Engineering, 12 );