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)
     strheight(s, units = "user", cex = 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'.

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' in the current font.  The
     inter-line spacing is controlled by 'cex', 'par("lheight")' and
     the 'point size' (but not the actual font in use).

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

