You could create individual graphs and then put them together in a window. If you always show the same 9 graphs the script below might be all you need; if the levels change you could build the window hierarchy with a loop.
Names default to here( 1 );
//Open sample data and create a binning column
dt = Open("$SAMPLE_DATA/Body Fat.jmp");
dt << New Column( "Age (decades)",
Numeric,
Nominal,
Format( "Best", 10 ),
Formula( 10 * Floor( :Name( "Age (years)" ) / 10 ) )
);
//function to build each individual graph with a local data filter
GraphDecade = function({decade},
gb = dt << Graph Builder(
Size( 300, 300 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :Name( "Age (years)" ) ) ),
Elements( Histogram( X, Legend( 5 ) ) ),
SendToReport( Dispatch( {},
"Graph Builder",
OutlineBox,
{Set Title( "Decade: " || Char( decade ) )} )
),
Local Data Filter(
Close Outline( 1 ),
Add Filter(
columns( :Name( "Age (decades)" ) ),
Where( :Name( "Age (decades)" ) == decade ),
Display( :Name( "Age (decades)" ), Size( 256, 168 ), List Display )
)
)
)
);
//Window with graphs
win = new window( "Ages by Decade",
V List Box(
Text Box( "Distribution of Ages within Decades", << Set Font Size( 20 ), << Set Width( 600 ) ),
H List Box(
vb1 = V List Box(
GraphDecade(20),
GraphDecade(40)
),
vb2 = V List Box(
GraphDecade(30),
GraphDecade(50)
)
)
)
);
(vb1[1] << Find("Local Data Filter")) << visibility("collapse");
(vb1[2] << Find("Local Data Filter")) << visibility("collapse");
(vb2[1] << Find("Local Data Filter")) << visibility("collapse");
(vb2[2] << Find("Local Data Filter")) << visibility("collapse");
Edited: Fixed bug