blob: 96ad60594e2e29bb7ee5cb6e07a9b626b9fe7b14 [file] [log] [blame]
% File src/library/grid/man/unit.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2007 R Core Team
% Distributed under GPL 2 or later
\name{unit}
\alias{unit}
\title{Function to Create a Unit Object}
\description{
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.
}
\usage{
unit(x, units, data=NULL)
}
\arguments{
\item{x}{A numeric vector.}
\item{units}{A character vector specifying the units for the
corresponding numeric values.}
\item{data}{This argument is used to supply extra information
for special \code{unit} types.}
}
\details{
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 \code{units} specifies
what coordinate system to use within that viewport.
Possible \code{units} (coordinate systems) are:
\describe{
\item{\code{"npc"}}{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.}
\item{\code{"cm"}}{Centimetres.}
\item{\code{"inches"}}{Inches. 1 in = 2.54 cm.}
\item{\code{"mm"}}{Millimetres. 10 mm = 1 cm.}
\item{\code{"points"}}{Points. 72.27 pt = 1 in.}
\item{\code{"picas"}}{Picas. 1 pc = 12 pt.}
\item{\code{"bigpts"}}{Big Points. 72 bp = 1 in.}
\item{\code{"dida"}}{Dida. 1157 dd = 1238 pt.}
\item{\code{"cicero"}}{Cicero. 1 cc = 12 dd.}
\item{\code{"scaledpts"}}{Scaled Points. 65536 sp = 1 pt.}
\item{\code{"lines"}}{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 \code{fontsize} and \code{lineheight}).}
\item{\code{"char"}}{Multiples of nominal font height of the
viewport (as specified by the viewport's \code{fontsize}).}
\item{\code{"native"}}{Locations and dimensions are relative to
the viewport's \code{xscale} and \code{yscale}.}
\item{\code{"snpc"}}{Square Normalised Parent Coordinates.
Same as Normalised Parent Coordinates, except gives the same answer for
horizontal and vertical locations/dimensions. It uses the
\emph{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).}
\item{\code{"strwidth"}}{Multiples of the width of the string
specified in the \code{data} argument. The font size is
determined by the pointsize of the viewport.}
\item{\code{"strheight"}}{Multiples of the height of the string
specified in the \code{data} argument. The font size is
determined by the pointsize of the viewport.}
\item{\code{"grobwidth"}}{Multiples of the width of the grob
specified in the \code{data} argument.}
\item{\code{"grobheight"}}{Multiples of the height of the grob
specified in the \code{data} argument.}
}
A number of variations are also allowed for the most common units.
For example, it is possible to use \code{"in"} or \code{"inch"}
instead of \code{"inches"} and \code{"centimetre"} or
\code{"centimeter"} instead of \code{"cm"}.
A special \code{units} value of \code{"null"} is also allowed,
but only makes sense when used in specifying widths of columns
or heights of rows in grid layouts (see \code{\link{grid.layout}}).
The \code{data} argument must be a list when the \code{unit.length()}
is greater than 1. For example,
\preformatted{ 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
\code{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., \code{unit(1, "npc") - unit(1, "inches")}),
and to specify the minimum or maximum of a list
of unit objects (e.g., \code{min(unit(0.5, "npc"), unit(1,
"inches"))}).
There is a \code{format} method for units, which should respond to
the arguments for the default \code{format} method, e.g.,
\code{digits} to control the number of significant digits
printed for numeric values.
}
\section{WARNING}{
There is a special function \code{unit.c} for concatenating
several unit objects.
The \code{c} function will not give the right answer.
There used to be \code{"mylines"}, \code{"mychar"}, \code{"mystrwidth"},
\code{"mystrheight"} units. These will still be accepted, but
work exactly the same as
\code{"lines"}, \code{"char"}, \code{"strwidth"},
\code{"strheight"}.
}
\value{
An object of class \code{"unit"}.
}
\author{Paul Murrell}
\seealso{
\code{\link{unit.c}}
}
\examples{
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]
x[2:4] <- unit(1, "mm")
x
}
\keyword{dplot}