strwidth              package:graphics              R Documentation

Plotting Dimensions of Character Strings and Math Expressions

Description:

     These functions compute the width or height, respectively, of the
     given strings or mathematical expressions 's[i]' on the current
     plotting device in _user_ coordinates, _inches_ or as fraction of
     the figure width 'par("fin")'.

Usage:

     strwidth(s, units = "user", cex = NULL, font = NULL, vfont = NULL, ...)
     strheight(s, units = "user", cex = NULL, font = NULL, vfont = NULL, ...)

Arguments:

       s: a character or expression vector whose dimensions are to be
          determined.  Other objects are coerced by 'as.graphicsAnnot'.

   units: character indicating in which units 's' is measured; should
          be one of '"user"', '"inches"', '"figure"'; partial matching
          is performed.

     cex: numeric *c*haracter *ex*pansion factor; multiplied by
          'par("cex")' yields the final character size; the default
          'NULL' is equivalent to '1'.

font, vfont, ...: additional information about the font, possibly
          including the graphics parameter '"family"': see 'text'.

Details:

     Where an element of 's' is a multi-line string (that is, contains
     newlines '\n'), the width and height are of an enclosing rectangle
     of the string as plotted by 'text'.  The inter-line spacing is
     controlled by 'cex', 'par("lheight")' and the 'point size' (but
     not the actual font in use).

     Measurements in '"user"' units (the default) are only available
     after 'plot.new' has been called - otherwise an error is thrown.

Value:

     Numeric vector with the same length as 's', giving the width or
     height for each 's[i]'.  'NA' strings are given width and height 0
     (as they are not plotted).

See Also:

     'text', 'nchar'

Examples:

     str.ex <- c("W","w","I",".","WwI.")
     op <- par(pty='s'); plot(1:100,1:100, type="n")
     sw <- strwidth(str.ex); sw
     all.equal(sum(sw[1:4]), sw[5])
     #- since the last string contains the others

     sw.i <- strwidth(str.ex, "inches"); 25.4 * sw.i # width in [mm]
     unique(sw / sw.i)
     # constant factor: 1 value
     mean(sw.i / strwidth(str.ex, "fig")) / par('fin')[1] # = 1: are the same

     ## See how letters fall in classes
     ##  -- depending on graphics device and font!
     all.lett <- c(letters, LETTERS)
     shL <- strheight(all.lett, units = "inches") * 72 # 'big points'
     table(shL) # all have same heights ...
     mean(shL)/par("cin")[2] # around 0.6

     (swL <- strwidth(all.lett, units="inches") * 72) # 'big points'
     split(all.lett, factor(round(swL, 2)))

     sumex <- expression(sum(x[i], i=1,n), e^{i * pi} == -1)
     strwidth(sumex)
     strheight(sumex)

     par(op)#- reset to previous setting

