I have many spectra plotted on a graph, each with its own label (annotation).
Is there a way to select all the annotations and edit the text (for example font size)?
They follow the graph size (Modify Graph...) if that helps.
This might also help:
#pragma TextEncoding = "Windows-1252" #pragma rtGlobals=3// Use modern global access method and strict wave access. #include<AnnotationInfo Procs>
Window TestGraph0() : Graph PauseUpdate; Silent1// building window... Display/W=(155.25,51.5,549.75,260) jack ModifyGraph zColor(jack)={jack,*,*,Grays} TextBox/C/N=text0/A=MC/X=0.46/Y=18.96"\\Z18This is an annotation with a fixed size" TextBox/C/N=text1/A=MC/X=-25.23/Y=44.55"This is an annotation with no size" TextBox/C/N=text2/A=MC/X=-3.24/Y=-3.32"\\Zr150This is an annotation with a relative font size" Tag/C/N=text3/X=1.62/Y=-16.11 jack, 38, "Tag with default font size" Tag/C/N=text4/X=6.12/Y=4.86 bottom, 64, "tag connected to bottom axis" ColorScale/C/N=text5/A=MC/X=43.75/Y=13.74 trace=jack AppendText"Default size axis text" Legend/C/N=text6/J/X=24.77/Y=11.37"\\s(jack) jack is a legend (default font size)" EndMacro
Function ChangeAnnotationsFontSize(win, newFontSize, isRelative) String win // graph or layout Variable newFontSize // points or percent. Use 0 to remove font size from annotation. Variable isRelative // if true, then newFontSize is relative font size in percent
String list = AnnotationList(win) Variablei, numBoxes = ItemsInList(list) for(i=0;i<numBoxes;i+=1) String thisBox = StringFromList(i, list ) String infoStr = AnnotationInfo(win, thisBox ) String text = AnnotationText(infoStr)
text= RewriteAnnotationTextSize(text, newFontSize, isRelative) String type = AnnotationType(infoStr)// "Tag", "TextBox", "ColorScale", or "Legend" String cmd="" strswitch(type) case"Tag": String ywave= AnnotationYWave(infoStr) Variable xAttach= AnnotationAttachX(infoStr) sprintf cmd, "%s/C/N=%s %s, %.14g, \"%s\"", type, thisBox, ywave, xAttach, text break case"ColorScale": // ColorScales have a font size that's normally 0 (graph font size) // in addition to the axis label \Z stuff // so they're not adjusted here. break// comment out this line to treat the axis label of a Colorscale just like a Textbox
default: sprintf cmd, "%s/C/N=%s \"%s\"", type, thisBox, text break endswitch if(strlen(cmd)) Execute/Q/Z cmd // remove /Q if you want to see the executed commands //Print cmd endif endfor
End
Function/S RewriteAnnotationTextSize(text, newFontSize, isRelative) String text // TextBox/C/N=text2/A=MC/X=-3.24/Y=-3.32 "\\Zr150This is an annotation with a relative font size" Variable newFontSize // 0 to remove font size, 18 for 18 point, 150 for 150% Variable isRelative // if true, then newFontSize is relative font size in percent
// rewrites only the initial font size escape code in the text. Variable slashZrStartPos = strsearch(text, "\\\\Zr" , 0) Variable slashZStartPos = strsearch(text, "\\\\Z" , 0) // handle the case where the text has both \\Z and \\Zr Variable startPos, endPos, foundRelative=0 if( slashZrStartPos >= 0&& slashZStartPos >= 0) if( slashZrStartPos <= slashZStartPos )// == if only \\Zr
startPos= slashZrStartPos
foundRelative=1 else
startPos= slashZStartPos endif elseif(slashZrStartPos >= 0)
startPos= slashZrStartPos
foundRelative=1 else
startPos= slashZStartPos endif if( startPos >= 0)// \\Z found if( foundRelative )
endPos = startPos + strlen("\\\\Zrnnn")-1// note: strlen("\\Z") is only 2 else
endPos = startPos + strlen("\\\\Zdd")-1 endif endif
This might also help:
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
#include <AnnotationInfo Procs>
Window TestGraph0() : Graph
PauseUpdate; Silent 1 // building window...
Display /W=(155.25,51.5,549.75,260) jack
ModifyGraph zColor(jack)={jack,*,*,Grays}
TextBox/C/N=text0/A=MC/X=0.46/Y=18.96 "\\Z18This is an annotation with a fixed size"
TextBox/C/N=text1/A=MC/X=-25.23/Y=44.55 "This is an annotation with no size"
TextBox/C/N=text2/A=MC/X=-3.24/Y=-3.32 "\\Zr150This is an annotation with a relative font size"
Tag/C/N=text3/X=1.62/Y=-16.11 jack, 38, "Tag with default font size"
Tag/C/N=text4/X=6.12/Y=4.86 bottom, 64, "tag connected to bottom axis"
ColorScale/C/N=text5/A=MC/X=43.75/Y=13.74 trace=jack
AppendText "Default size axis text"
Legend/C/N=text6/J/X=24.77/Y=11.37 "\\s(jack) jack is a legend (default font size)"
EndMacro
Menu "Graph"
"-"
Submenu "Annotation Font Sizes"
"6 points",/Q, ChangeAnnotationsFontSize(WinName(0,1), 6, 0)
"8 points",/Q, ChangeAnnotationsFontSize(WinName(0,1), 8, 0)
"10 points",/Q, ChangeAnnotationsFontSize(WinName(0,1), 10, 0)
"12 points",/Q, ChangeAnnotationsFontSize(WinName(0,1), 12, 0)
"16 points",/Q, ChangeAnnotationsFontSize(WinName(0,1), 16, 0)
"24 points",/Q, ChangeAnnotationsFontSize(WinName(0,1), 24, 0)
"-"
"50%",/Q, ChangeAnnotationsFontSize(WinName(0,1), 50, 1)
"66%",/Q, ChangeAnnotationsFontSize(WinName(0,1), 66, 1)
"75%",/Q, ChangeAnnotationsFontSize(WinName(0,1), 75, 1)
"88%",/Q, ChangeAnnotationsFontSize(WinName(0,1), 88, 1)
"\\M0::100% (default)",/Q, ChangeAnnotationsFontSize(WinName(0,1), 0, 0)
"125%",/Q, ChangeAnnotationsFontSize(WinName(0,1), 125, 1)
"150%",/Q, ChangeAnnotationsFontSize(WinName(0,1), 150, 1)
"175%",/Q, ChangeAnnotationsFontSize(WinName(0,1), 175, 1)
"200%",/Q, ChangeAnnotationsFontSize(WinName(0,1), 200, 1)
End
"-"
End
Function ChangeAnnotationsFontSize(win, newFontSize, isRelative)
String win // graph or layout
Variable newFontSize // points or percent. Use 0 to remove font size from annotation.
Variable isRelative // if true, then newFontSize is relative font size in percent
String list = AnnotationList(win)
Variable i, numBoxes = ItemsInList(list)
for(i=0;i<numBoxes;i+=1)
String thisBox = StringFromList( i, list )
String infoStr = AnnotationInfo(win, thisBox )
String text = AnnotationText(infoStr)
text= RewriteAnnotationTextSize(text, newFontSize, isRelative)
String type = AnnotationType(infoStr) // "Tag", "TextBox", "ColorScale", or "Legend"
String cmd=""
strswitch(type)
case "Tag":
String ywave= AnnotationYWave(infoStr)
Variable xAttach= AnnotationAttachX(infoStr)
sprintf cmd, "%s/C/N=%s %s, %.14g, \"%s\"", type, thisBox, ywave, xAttach, text
break
case "ColorScale":
// ColorScales have a font size that's normally 0 (graph font size)
// in addition to the axis label \Z stuff
// so they're not adjusted here.
break // comment out this line to treat the axis label of a Colorscale just like a Textbox
default:
sprintf cmd, "%s/C/N=%s \"%s\"", type, thisBox, text
break
endswitch
if( strlen(cmd) )
Execute/Q/Z cmd // remove /Q if you want to see the executed commands
//Print cmd
endif
endfor
End
Function/S RewriteAnnotationTextSize(text, newFontSize, isRelative)
String text // TextBox/C/N=text2/A=MC/X=-3.24/Y=-3.32 "\\Zr150This is an annotation with a relative font size"
Variable newFontSize // 0 to remove font size, 18 for 18 point, 150 for 150%
Variable isRelative // if true, then newFontSize is relative font size in percent
// rewrites only the initial font size escape code in the text.
Variable slashZrStartPos = strsearch(text, "\\\\Zr" , 0)
Variable slashZStartPos = strsearch(text, "\\\\Z" , 0)
// handle the case where the text has both \\Z and \\Zr
Variable startPos, endPos, foundRelative=0
if( slashZrStartPos >= 0 && slashZStartPos >= 0 )
if( slashZrStartPos <= slashZStartPos ) // == if only \\Zr
startPos= slashZrStartPos
foundRelative=1
else
startPos= slashZStartPos
endif
elseif(slashZrStartPos >= 0)
startPos= slashZrStartPos
foundRelative=1
else
startPos= slashZStartPos
endif
if( startPos >= 0 ) // \\Z found
if( foundRelative )
endPos = startPos + strlen("\\\\Zrnnn")-1 // note: strlen("\\Z") is only 2
else
endPos = startPos + strlen("\\\\Zdd")-1
endif
endif
String replaceWith=""
if( newFontSize )
if( isRelative )
sprintf replaceWith, "\\\\Zr%03d", newFontSize
else
sprintf replaceWith, "\\\\Z%02d", newFontSize
endif
endif
if( startPos < 0 )
text = replaceWith + text
else
text[startPos, endPos] = replaceWith
endif
return text
End
--Jim Prouty
Software Engineer, WaveMetrics, Inc.
January 20, 2018 at 12:38 pm - Permalink
http://www.igorexchange.com/project/AnnotationTools
--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH
January 20, 2018 at 04:18 pm - Permalink