- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Set Title of Graph Builder Charts
I've written a script in JMP 18 which creates line charts in rows of 3 using 'graph builder', 'fit group'. Basically, the tables contain measure values for 'analytes' in multiple 'bioreactors' over multiple 'time points'. In JMP 18 I get a title for each chart, but a colleague using JMP 17 finds that the title is missing which renders the chart meaningless. I'm completely stumped! Any suggestions as to what I can do to add a title?
Here's the script:
newWindow = New Window(reportName, tb = Tab Box());
//loop through the dataTables and add tab page box for each with a local data filter for dilution factor on left, and line charts on the right
for( i = 1, i <= NItems(dataTables), i++,
tb << Add(
Tab Page Box(
Title(dataTables[i] << get name),
Data Filter Context Box(
H List Box(
dataTables[i] << Data Filter(
Local,
Add Filter( columns( :Dilution Factor, :Type ) ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
),
V List Box(
dataTables[i] << Fit Group(
Graph Builder(
Size( 300, 300 ),
Show Control Panel( 0 ),
Variables(
X( :Time point ),
Y( :"Mean(Value)"n ),
Overlay( :Vessel )
),
Elements( Line( X, Y, Legend( 20 ) ) ),
By( :Analyte )
),
<<{Arrange in Rows( 3 )}
)
)
)
)
)
)
);
tb << set selected(1);
In JMP 17 the title highlighted with the red arrow is missing for each chart:
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Set Title of Graph Builder Charts
As @jthi points out, the data filter is one source of the differences. The way that Fit Group responds to the data filter has changed in JMP 18+.
Another big difference between JMP 17 and JMP 18 is the addition of the Group Platform for by-groups. In JMP 18, this new platform has layout options similar to Fit Group. In JMP 17 you could replace the Fit Group by a Line Up Box for the layout. Combining the two together, this script works reasonably well for me in both:
dataTables = EvalList({
Open("$SAMPLE_DATA/Big Class.jmp"),
Open("$SAMPLE_DATA/Big Class Families.jmp")
});
newWindow = New Window("Reports", tb = Tab Box());
//loop through the dataTables and add tab page box for each with a local data filter for dilution factor on left, and line charts on the right
for( i = 1, i <= NItems(dataTables), i++,
tb << Add(
Tab Page Box(
Title(dataTables[i] << get name),
Data Filter Context Box(
H List Box(
dataTables[i] << Data Filter(
Local,
Add Filter( columns( :sex ) )
),
V List Box(
Line Up Box(NCol(3),
dataTables[i] << Graph Builder(
Size( 300, 300 ),
Show Control Panel( 0 ),
Variables(
X( :height ),
Y( :weight )
),
Elements( Line( X, Y, Legend( 20 ) ) ),
By( :age ),
Group Options( Layout( "Arrange in Rows", N Across( 3 ) ) )
)
)
)
)
)
)
)
);
tb << set selected(1);
The layout between 17/18 will be different - in JMP 17 the LineUpBox is managing the grid, while in JMP 18 the Group Platform manages the layout, and all the LineUpBox only has 1 child.
Your other option might be to use the Wrap role in Graph Builder rather than using By, but that would give you shared axes and legend, which you may not want.
-Dan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Set Title of Graph Builder Charts
To rule out strange settings in the preferences, could you please compare the output of:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "test",
dt << Fit Group(
Graph Builder(
Ignore Platform Preferences(1), // next step: disable this line
Size( 300, 300 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Line( X, Y, ) ),
By( :age )
),
<<{Arrange in Rows( 3 )}
)
);
Next step: disable the line and check again.
If there is no issue with the sample data set we have to find the issue
a) in your data.
-> possible to share?
b) in the remaining part of the code ....
...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Set Title of Graph Builder Charts
Your data filter is breaking it in JMP17
Names Default To Here( 1 );
dts = {};
Insert Into(dts, Open("$SAMPLE_DATA/Big Class.jmp"));
Insert Into(dts, Open("$SAMPLE_DATA/Big Class Families.jmp"));
nw = New Window("", tb = Tab Box());
For(i = 1, i <= N Items(dts), i++,
tb << Add(
Tab Page Box(Title(dts[i] << get name),
Data Filter Context Box(
H List Box(
/*dts[i] << Data Filter(
Local,
Add Filter(
columns(:sex)),
Mode(Select(1), Show(1), Include(1))
),*/
V List Box(
dts[i] << Fit Group(
Graph Builder(
Size(300, 300),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Line(X, Y, )), By(:age)
),
<<{Arrange in Rows(3)}
)
)
)
)
)
)
);
If you want to use << Fit Group (not really sure if it should be used as it's not meant for graph builder even though it works, you have few options: fix the titles after creation or create them in different manner.
This is most likely not very robust, but can give some idea of what you could do (using the values from column instead of relying on Where expression is most likely more robust option)
Names Default To Here( 1 );
dts = {};
Insert Into(dts, Open("$SAMPLE_DATA/Big Class.jmp"));
Insert Into(dts, Open("$SAMPLE_DATA/Big Class Families.jmp"));
nw = New Window("", tb = Tab Box());
For(i = 1, i <= N Items(dts), i++,
tb << Add(
Tab Page Box(Title(dts[i] << get name),
Data Filter Context Box(
H List Box(
dts[i] << Data Filter(
Local,
Add Filter(
columns(:sex)),
Mode(Select(1), Show(1), Include(1))
),
V List Box(
dts[i] << Fit Group(
Graph Builder(
Size(300, 300),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Line(X, Y, )), By(:age)
),
<<{Arrange in Rows(3)}
)
)
)
)
)
)
);
wait(0);
If(Word(1, JMP Version(), ".") == "17",
gb_obs = nw << XPath("//OutlineBox[@helpKey = 'Graph Builder']");
For Each({gb_ob}, gb_obs,
gb = gb_ob << Get Scriptable Object;
s = gb << get script;
w = Extract Expr(s, Where(Wild List()));
a = Substitute(Char(Arg(w, 1)), "==", "=");
gb << Title("Graph Builder " || Substr(a, 2))
);
);
Edit: The titles will break if data filter is used
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Set Title of Graph Builder Charts
Might be easiest to use separate methods for different versions as how by columns work was changed in JMP18 and not all work with both
Names Default To Here( 1 );
dts = {};
Insert Into(dts, Open("$SAMPLE_DATA/Big Class.jmp"));
Insert Into(dts, Open("$SAMPLE_DATA/Big Class Families.jmp"));
nw = New Window("", tb = Tab Box());
For(i = 1, i <= N Items(dts), i++,
tb << Add(
Tab Page Box(Title(dts[i] << get name),
Data Filter Context Box(
H List Box(
dts[i] << Data Filter(
Local,
Add Filter(
columns(:sex)),
Mode(Select(1), Show(1), Include(1))
),
If(Word(1, JMP Version(), ".") == "17",
Lineup Box(N Col(3),
gb = Graph Builder(
Size(300, 300),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Line(X, Y, )), By(:age)
)
)
,
gb = Graph Builder(
Size(300, 300),
Group Options(Layout("Arrange in Rows", N Across(3))),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Line(X, Y, )), By(:age)
)
)
)
)
)
)
);
If you want your users to be able to change how many items are in each row, you can add outline box and script to that.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Set Title of Graph Builder Charts
Many thanks for this suggestion. I ended up using the Line Up Box for both JMP 17 and JMP 18
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Set Title of Graph Builder Charts
As @jthi points out, the data filter is one source of the differences. The way that Fit Group responds to the data filter has changed in JMP 18+.
Another big difference between JMP 17 and JMP 18 is the addition of the Group Platform for by-groups. In JMP 18, this new platform has layout options similar to Fit Group. In JMP 17 you could replace the Fit Group by a Line Up Box for the layout. Combining the two together, this script works reasonably well for me in both:
dataTables = EvalList({
Open("$SAMPLE_DATA/Big Class.jmp"),
Open("$SAMPLE_DATA/Big Class Families.jmp")
});
newWindow = New Window("Reports", tb = Tab Box());
//loop through the dataTables and add tab page box for each with a local data filter for dilution factor on left, and line charts on the right
for( i = 1, i <= NItems(dataTables), i++,
tb << Add(
Tab Page Box(
Title(dataTables[i] << get name),
Data Filter Context Box(
H List Box(
dataTables[i] << Data Filter(
Local,
Add Filter( columns( :sex ) )
),
V List Box(
Line Up Box(NCol(3),
dataTables[i] << Graph Builder(
Size( 300, 300 ),
Show Control Panel( 0 ),
Variables(
X( :height ),
Y( :weight )
),
Elements( Line( X, Y, Legend( 20 ) ) ),
By( :age ),
Group Options( Layout( "Arrange in Rows", N Across( 3 ) ) )
)
)
)
)
)
)
)
);
tb << set selected(1);
The layout between 17/18 will be different - in JMP 17 the LineUpBox is managing the grid, while in JMP 18 the Group Platform manages the layout, and all the LineUpBox only has 1 child.
Your other option might be to use the Wrap role in Graph Builder rather than using By, but that would give you shared axes and legend, which you may not want.
-Dan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Set Title of Graph Builder Charts
Another option: let the colleague update to JMP18.1 and use the new page option which was introduced with JMP18
Bonus for him:
no issues anymore with Find - or not find?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Variables(
X( :height ),
Y( :weight ),
Page( :age, Levels per Row( 3 ) ),
Overlay( :sex )
),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Set Title of Graph Builder Charts
Thank you for your help with this - it took a few days to get it tested in JMP 17 but it works fine.