- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Get the title from a Graph Builder Panel
I could use some help on why I can't get the title of the 1st panel in this Graph builder
with this code
report=current report();
test=(report<< XPath("(//OutlineBox[text()='Graph Builder']//GraphBuilderGroupBox)[2]"))<<get title;
Thanks for any suggestions!
Steve
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Get the title from a Graph Builder Panel
If you check the XML for single GraphBuilderGroupBox you can see that you are looking for the value from XML
"<GraphBuilderGroupBox width=\!"570\!" height=\!"24\!" selected=\!"true\!">age = 12</GraphBuilderGroupBox>"
And you can get that value using XPath
gbb_texts = (Report(gb) << XPath("(//GraphBuilderGroupBox/text())"));// {"age = 12", "age = 13", "age = 14", "age = 15", "age = 16", "age = 17"}
And if you just want to get the first one, you can limit the index already in XPath (like you have done) and then take first index from that as << XPath will return a list (I would most likely skip XPath index in this case, as you still have to use JMP's index)
gbb_text = (Report(gb) << XPath("((//GraphBuilderGroupBox/text()))[1]"))[1];// or gbb_text = (Report(gb) << XPath("(//GraphBuilderGroupBox)[1]/text()"))[1];
with just JMP index
gbb_text= (Report(gb) << XPath("//GraphBuilderGroupBox/text()"))[1];
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:weight), Y(:height), Page(:age), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
group_texts = (Report(gb) << XPath("//GraphBuilderGroupBox/text()"));
// {"age = 12", "age = 13", "age = 14", "age = 15", "age = 16", "age = 17"}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Get the title from a Graph Builder Panel
Ah, interesting. I never noticed - or cared:
With some Xpath Parsers, one already gets the content of the node
https://www.w3schools.com/xml/xpath_examples.asp
http://xpather.com/
E.g. after pasting the result of
xml= current report() << Get XML;
into http://xpather.com/ and searching for
(//OutlineBox[text()='Graph Builder']//GraphBuilderGroupBox)[2]
one gets: "age = 13"
JMP and others
https://www.freeformatter.com/xpath-tester.html
https://magictool.ai/tool/xpath-tester/de/
http://xpather.com/ (setting: node)
return the surrounding "object".
So, one has to retrieve the content of the node in a separate step ...
I guess there is an easier way than this one ...
Till somebody posts it, you can use
report=current report();
test=(report<< XPath("(//OutlineBox[text()='Graph Builder']//GraphBuilderGroupBox)[2]"))[1];
xml= test << Get XML;
Regex (xml, ">(.*?)<\/GraphBuilderGroupBox>", "\1")
by the way - thank you for the trick:
direct indexing via [2] is possible in XPath - cool, thanks!!!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Get the title from a Graph Builder Panel
If you check the XML for single GraphBuilderGroupBox you can see that you are looking for the value from XML
"<GraphBuilderGroupBox width=\!"570\!" height=\!"24\!" selected=\!"true\!">age = 12</GraphBuilderGroupBox>"
And you can get that value using XPath
gbb_texts = (Report(gb) << XPath("(//GraphBuilderGroupBox/text())"));// {"age = 12", "age = 13", "age = 14", "age = 15", "age = 16", "age = 17"}
And if you just want to get the first one, you can limit the index already in XPath (like you have done) and then take first index from that as << XPath will return a list (I would most likely skip XPath index in this case, as you still have to use JMP's index)
gbb_text = (Report(gb) << XPath("((//GraphBuilderGroupBox/text()))[1]"))[1];// or gbb_text = (Report(gb) << XPath("(//GraphBuilderGroupBox)[1]/text()"))[1];
with just JMP index
gbb_text= (Report(gb) << XPath("//GraphBuilderGroupBox/text()"))[1];
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:weight), Y(:height), Page(:age), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
group_texts = (Report(gb) << XPath("//GraphBuilderGroupBox/text()"));
// {"age = 12", "age = 13", "age = 14", "age = 15", "age = 16", "age = 17"}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Get the title from a Graph Builder Panel
Woot woot!
Thanks @hogi and @jthi ! As usual, fast and amazing help.
The reason for the ask was that I need to have different axis settings for different panels but since the # of panels change the hard coding of the axis range from the saved script Graph Builder makes (e.g. Scalebox(2)) causes the charts to be all messed up on later times when I run it. So I can now use this code to loop through the panels, check what is there, and then set the axis min and max correctly. Still a lot of painful coding to do but at least now I have a path!
Steve