Function to Create a Unit Object


This function creates a unit object — a vector of unit values. A unit value is typically just a single numeric value with an associated unit.





A numeric vector.


A character vector specifying the units for the corresponding numeric values.


This argument is used to supply extra information for special unit types.


Unit objects allow the user to specify locations and dimensions in a large number of different coordinate systems. All drawing occurs relative to a viewport and the units specifies what coordinate system to use within that viewport.

Possible units (coordinate systems) are:


Normalised Parent Coordinates (the default). The origin of the viewport is (0, 0) and the viewport has a width and height of 1 unit. For example, (0.5, 0.5) is the centre of the viewport.




Inches. 1 in = 2.54 cm.


Millimetres. 10 mm = 1 cm.


Points. 72.27 pt = 1 in.


Picas. 1 pc = 12 pt.


Big Points. 72 bp = 1 in.


Dida. 1157 dd = 1238 pt.


Cicero. 1 cc = 12 dd.


Scaled Points. 65536 sp = 1 pt.


Lines of text. Locations and dimensions are in terms of multiples of the default text size of the viewport (as specified by the viewport's fontsize and lineheight).


Multiples of nominal font height of the viewport (as specified by the viewport's fontsize).


Locations and dimensions are relative to the viewport's xscale and yscale.


Square Normalised Parent Coordinates. Same as Normalised Parent Coordinates, except gives the same answer for horizontal and vertical locations/dimensions. It uses the lesser of npc-width and npc-height. This is useful for making things which are a proportion of the viewport, but have to be square (or have a fixed aspect ratio).


Multiples of the width of the string specified in the data argument. The font size is determined by the pointsize of the viewport.


Multiples of the height of the string specified in the data argument. The font size is determined by the pointsize of the viewport.


Multiples of the width of the grob specified in the data argument.


Multiples of the height of the grob specified in the data argument.

A number of variations are also allowed for the most common units. For example, it is possible to use "in" or "inch" instead of "inches" and "centimetre" or "centimeter" instead of "cm".

A special units value of "null" is also allowed, but only makes sense when used in specifying widths of columns or heights of rows in grid layouts (see grid.layout).

The data argument must be a list when the unit.length() is greater than 1. For example,

  unit(rep(1, 3), c("npc", "strwidth", "inches"),
  data = list(NULL, "my string", NULL))
. It is possible to subset unit objects in the normal way and to perform subassignment (see the examples), but a special function unit.c is provided for combining unit objects. Certain arithmetic and summary operations are defined for unit objects. In particular, it is possible to add and subtract unit objects (e.g., unit(1, "npc") - unit(1, "inches")), and to specify the minimum or maximum of a list of unit objects (e.g., min(unit(0.5, "npc"), unit(1, "inches"))).


An object of class "unit".


There is a special function unit.c for concatenating several unit objects.

The c function will not give the right answer.

There used to be "mylines", "mychar", "mystrwidth", "mystrheight" units. These will still be accepted, but work exactly the same as "lines", "char", "strwidth", "strheight".


Paul Murrell

See Also



unit(1, "npc")
unit(1:3/4, "npc")
unit(1:3/4, "npc") + unit(1, "inches")
min(unit(0.5, "npc"), unit(1, "inches"))
unit.c(unit(0.5, "npc"), unit(2, "inches") + unit(1:3/4, "npc"),
       unit(1, "strwidth", "hi there"))
x <- unit(1:5, "npc")
x[2:4] <- unit(1, "mm")

Want to suggest features or report bugs for Use the GitHub issue tracker.

comments powered by Disqus