Hi @txnelson & @jthi ,
Once again, thanks for the wonderful suggestions. This time, I ended up going with @txnelson 's suggestion of using the <<Add Graphics Script because it gave me a little more flexibility in how I wanted to place the text as well as putting it inside a For() loop to loop through all the peak ranks. I had vectors of the all the Period, Frequency, and Spectral Density (or Periodogram) values, so looping through was easier than searching through the table. It works great, thank you!
One thing to note for any others reading this thread and trying something similar, when adding multiple graphics scripts to the GB or whatever graphic, it's important that you Substitute() the actual variables so that each new text will be placed in a unique location and not just overwritten by the last Add Graphics Script. What I mean by this, is that you need to do something like the following in order to add multiple different texts to the graphic:
Eval(
Substitute(
Expr(
gbframebox_1 << Add Graphics Script( Text( Eval( {__xpos__, __ypos__} ), __gb_text__ ) );
gbframebox_2 << Add Graphics Script( Text( Eval( {__fpos__, __ypos__} ), __gb_text__ ) );
),
Expr( __xpos__ ), xpos,
Expr( __fpos__ ), fpos,
Expr( __ypos__ ), ypos,
Expr( __gb_text__ ), gb_text
)
);
All of that needs to be within a For() loop, of course, and with each iteration you redefine what the Expr() variables are so that each added text is unique. Here, the Expr() variables start and end with two underscore characters __ (I believe I adopted this from a previous suggestion I got from @txnelson on handling specification parameters using JSL). Note, for me there are two frame boxes because I am plotting the same y-variable against two different x-variables using graph builder.
Thanks again for all your help!,
DS