Rev 1616 | Rev 1690 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{xyplot}\title{Common Bivariate Trellis Plots}\alias{xyplot}\alias{barchart}\alias{bwplot}\alias{dotplot}\alias{stripplot}\synopsis{xyplot(formula,data = parent.frame(),allow.multiple = is.null(groups) || outer,outer = !is.null(groups),auto.key = FALSE,aspect = "fill",panel = if (is.null(groups)) "panel.xyplot"else "panel.superpose",prepanel = NULL,scales = list(),strip = TRUE,groups = NULL,xlab,xlim,ylab,ylim,drop.unused.levels = lattice.getOption("drop.unused.levels"),...,default.scales,subscripts = !is.null(groups),subset = TRUE)bwplot(formula,data = parent.frame(),allow.multiple = is.null(groups) || outer,outer = FALSE,auto.key = FALSE,aspect = "fill",panel = "panel.bwplot",prepanel = NULL,scales = list(),strip = TRUE,groups = NULL,xlab,xlim,ylab,ylim,box.ratio = 1,horizontal = NULL,drop.unused.levels = lattice.getOption("drop.unused.levels"),...,default.scales,subscripts = !is.null(groups),subset = TRUE)}\usage{xyplot(formula,data = parent.frame(),panel = if (is.null(groups)) "panel.xyplot"else "panel.superpose",allow.multiple,outer,aspect = "fill",as.table = FALSE,between,groups,key,auto.key = FALSE,legend,layout,main,page,par.strip.text,prepanel,scales,skip,strip = "strip.default",sub,xlab,xlim,ylab,ylim,drop.unused.levels,par.settings,perm.cond,index.cond,\dots,default.scales,panel.groups = "panel.xyplot",subscripts,subset)dotplot(formula,data,panel = "panel.dotplot",groups = NULL,...,subset = TRUE)barchart(formula,data,panel = "panel.barchart",box.ratio = 2,groups = NULL,...,subset = TRUE)stripplot(formula,data,panel = "panel.stripplot",jitter = FALSE,factor = .5,box.ratio = if (jitter) 1 else 0,groups = NULL,...,subset = TRUE)bwplot(formula,data,panel = "panel.bwplot",box.ratio = 1,...,horizontal,subset = TRUE)}\description{These are the most commonly used high level Trellis functions to plotpairs of variables. By far the most common is \code{xyplot}, designedmainly for two continuous variates (though factors can be supplied aswell, in which case they will simply be coerced to numeric), whichproduces Conditional Scatterplots. The others are useful when one ofthe variates is a factor or a shingle. Most of these arguments arealso applicable for other high level functions in the lattice package,but are only documented here.}\arguments{\item{formula}{a formula describing the form of conditioning plot. The formula isgenerally of the form \code{y ~ x | g1 * g2 * \dots}, indicatingthat plots of \code{y} (on the y axis) versus \code{x} (on the xaxis) should be produced conditional on the variables\code{g1, g2, \dots}. However, the conditioning variables\code{g1,g2,\dots} may be omitted. The formula can also be suppliedas \code{y ~ x | g1 + g2 + \dots}.For all of these functions, with the exception of \code{xyplot}, aformula of the form \code{ ~ x | g1 * g2 * \dots} is alsoallowed. In that case, \code{y} defaults to \code{names(x)} if\code{x} is named, and a factor with a single level otherwise.Although it is not recommended, usage of the form \code{dotplot(x)}(where the formula argument is not a formula at all) is alsoallowed, and is equivalent to \code{dotplot( ~ x)}.The conditioning variables \code{g1, g2, \dots} must be eitherfactors or shingles. Shingles are a way of processing numericvariables for use in conditioning. See documentation of\code{\link{shingle}} for details. Like factors, they have a`levels' attribute, which is used in producing the conditionalplots.Numeric conditioning variables are converted to shingles by thefunction \code{shingle} (however, using \code{\link{equal.count}}might be more appropriate in many cases) and character vectors arecoerced to factors.The formula can involve expressions, e.g. \code{sqrt()},\code{log()}.A special case is when the left and/or right sides of the formula(before the conditioning variables) contain a `+' sign, e.g.,\code{y1+y2 ~ x | a*b}. This formula would be taken to mean that theuser wants to plot both \code{y1~x | a*b} and \code{y2~x | a*b}, butwith the \code{y1~x} and \code{y2~x} superposed in each panel (thisis slightly more complicated in \code{barchart}). The two partswould be distinguished by different graphical parameters. This isessentially what the \code{groups} argument would produce, if\code{y1} and \code{y2} were concatenated to produce a longervector, with the \code{groups} argument being an indicator of whichrows come from which variable. In fact, this is exactly what isdone internally using the \code{\link{reshape}} function. Thisfeature cannot be used in conjunction with the \code{groups}argument.To interpret \code{y1 + y2} as a sum, one can either set\code{allow.multiple=FALSE} or use \code{I(y1+y2)}.A variation on this feature is when the \code{outer} argument is setto \code{TRUE} as well as \code{allow.multiple}. In that case, theplots are not superposed in each panel, but instead separated intodifferent panels (as if a new conditioning variable had been added).The \code{x} and \code{y} variables should both be numeric in\code{xyplot}, and an attempt is made to coerce them ifnot. However, if either is a factor, the levels of that factor areused as axis labels. In the other four functions documented here,exactly one of \code{x} and \code{y} should be numeric, and theother a factor or shingle. Which of these will happen is determinedby the \code{horizontal} argument --- if \code{horizontal=TRUE},then \code{y} will be coerced to be a factor or shingle, otherwise\code{x}. The default value of \code{horizontal} is \code{FALSE} if\code{x} is a factor or shingle, \code{TRUE} otherwise. (Thefunctionality provided by \code{horizontal=FALSE} is notS-compatible.)% All points with at least one of its values missing (NA) in any% of the variates involved are omitted from the plot.}\item{data}{a data frame containing values for any variables in theformula, as well as \code{groups} and \code{subset} if applicable.By default the environment where the function was called from isused.}\item{allow.multiple, outer}{logical flags to control what happens with formulas like \code{y1 +y2 ~ x}. See the entry for \code{formula} for details.\code{allow.multiple} defaults to \code{TRUE} whenever it makessense, and \code{outer} defaults to \code{FALSE} except when\code{groups} is explicitly specified or grouping doesn't make sensefor the default panel function}\item{box.ratio}{ applicable to \code{bwplot}, \code{barchart} and\code{stripplot}, specifies the ratio of the width of the rectanglesto the inter rectangle space.}\item{horizontal}{ logical, applicable to \code{bwplot, dotplot,barchart} and \code{stripplot}. Determines which of \code{x} and\code{y} is to be a factor or shingle (\code{y} if TRUE, \code{x}otherwise). Defaults to \code{FALSE} if \code{x} is a factor orshingle, \code{TRUE} otherwise. This argument is used to process thearguments to these high level functions, but more importantly, it ispassed as an argument to the panel function, which is supposed touse it as approporiate.A potentially useful component of \code{scales} in this case mightbe \code{abbreviate = TRUE}, in which case long labels which wouldusually overlap will be abbreviated. \code{scales} could alsocontain a \code{minlength} argument in this case, which would bepassed to the \code{abbreviate} function.}\item{jitter}{logical specifying whether the values should be jittered by adding arandom noise in stripplot.}\item{factor}{numeric controlling amount of jitter as in \code{\link{jitter}}.}The following arguments are common to all the functions documentedhere, as well as most other high level Trellis functions. These arenot documented elsewhere, except to override the usage given here.\item{panel}{Once the subset of rows defined by each unique combination of thelevels of the grouping variables are obtained (see details), thecorresponding \code{x} and \code{y} variables (or other variables,as appropriate, in the case of other high level functions) arepassed on to be plotted in each panel. The actual plotting is doneby the function specified by the \code{panel} argument. Each highlevel function has its own default panel function, which coulddepend on whether the \code{groups} argument was supplied.The panel function can be a function object or a character stringgiving the name of a predefined function.Much of the power of Trellis Graphics comes from the ability todefine customized panel functions. A panel function appropriatefor the functions described here would usually expect argumentsnamed \code{x} and \code{y}, which would be provided by theconditioning process. It can also have other arguments. It might beuseful to know in this context that all arguments passed to a highlevel Trellis function (such as \code{xyplot}) that are notrecognized by it are passed through to the panel function. It isthus generally good practice when defining panel functions to allowa \code{\dots} argument. Such extra arguments typically controlgraphical parameters, but other uses are also common. Seedocumentation for individual panel functions for specifics.Note that unlike in S-PLUS, it is not guaranteed that panelfunctions will be supplied only numeric vectors for the \code{x} and\code{y} arguments; they can be factors as well (but notshingles). Panel functions need to handle this case, which in mostcases can be done by simply coercing them to numeric.Technically speaking, panel functions must be written using Gridgraphics functions. However, knowledge of Grid is usually notnecessary to construct new custom panel functions, there are severalpredefined panel functions which can help; for example,\code{panel.grid}, \code{panel.loess}, etc. There are also somegrid-compatible replacements of commonly used base R graphicsfunctions useful for this purpose. For example, \code{lines} can bereplaced by \code{llines} (or equivalently, \code{panel.lines}).Note that base R graphics functions like \code{lines} will not workin a lattice panel function.One case where a bit more is required of the panel function is whenthe \code{groups} argument is not null. In that case, the panelfunction should also accept arguments named \code{groups} and\code{subscripts} (see below for details). An useful panel functionpredefined for use in such cases is \code{panel.superpose}, whichcan be combined with different \code{panel.groups} functionsdetermining what is plotted for each group. See the examplessection for an interaction plot constructed in this way. Severalother panel functions can also handle the \code{groups} argument,including the default ones for \code{barchart}, \code{dotplot} and\code{stripplot}.Even when \code{groups} is not present, the panel function can have\code{subscripts} as a formal argument. In either case, the\code{subscripts} argument passed to the panel function are theindices of the \code{x} and \code{y} data for that panel in theoriginal \code{data}, BEFORE taking into account the effect ofthe \code{subset} argument. Note that \code{groups} remainsunaffected by any subsetting operations, so\code{groups[subscripts]} gives the values of \code{groups} thatcorrespond to the data in that panel. The value of\code{subscripts} becomes slightly more complicated when\code{allow.multiple} is in effect. Details can be found in thesource code of the function \code{latticeParseFormula}.A panel function can have two other optional arguments forconvenience, namely \code{panel.number} and\code{panel.counter}. Both provide a simple integer index indicatingwhich panel is currently being drawn, but differ in how the count iscalculated. \code{panel.counter} is a simple incremental counterthat starts with 1 and is incremented each time a panel isdrawn. \code{panel.number} on the other hand depends only on thecombination of levels of the conditioning variables that isrepresented by that panel. The two indices coincide unless theorder of conditioning variables is permuted and/or the plottingorder of levels within one or more conditioning variables is altered(using \code{perm.cond} and \code{index.cond} respectively), inwhich case \code{panel.number} gives the index corresponding to the`natural' ordering of that combination of levels of the conditioningvariables.\code{panel.xyplot} has an argument called \code{type} which isworth mentioning here because it is quite frequently used (and asmentioned above, can be passed to \code{xyplot} directly). panelfunctions for \code{bwplot} and friends should have an argumentcalled \code{horizontal} to account for the cases when \code{x} isthe factor or shingle.}\item{panel.groups}{useful mostly for \code{xyplot} and \code{densityplot}. Applies when\code{panel} is \code{panel.superpose} (which happens by default inthese cases if \code{groups} is non-null)}\item{aspect}{ controls physical aspect ratio of the panels (same forall the panels). It can be specified as a ratio (verticalsize/horizontal size) or as a character string. Legitimatevalues are "fill" (the default) which tries to make the panels asbig as possible to fill the available space; "xy", which\bold{tries} to compute the aspect based on the 45 degree bankingrule (see \emph{Visualizing Data} by William S. Cleveland fordetails); and "iso" for isometric scales, where the relation betweenphysical distance on the device and distance in the data scale areforced to be the same for both axes.If a \code{prepanel} function is specified and it returns components\code{dx} and \code{dy}, these are used for banking calculations.Otherwise, values from the default prepanel function are used.Currently, only the default prepanel function for \code{xyplot} canbe expected to produce sensible banking calculations. See\code{\link{banking}} for details on the implementation of banking .}\item{as.table}{ logical that controls the order in which panelsshould be plotted: if \code{FALSE} (the default), panels are drawnleft to right, bottom to top (as in a graph); if \code{TRUE}, leftto right, top to bottom.}\item{between}{ a list with components \code{x} and \code{y} (bothusually 0 by default), numeric vectors specifying the space betweenthe panels (units are character heights). \code{x} and \code{y} arerepeated to account for all panels in a page and any extracomponents are ignored. The result is used for all pages in amultipage display. (In other words, it is not possible to usedifferent \code{between} values for different pages).}\item{groups}{ a variable or expression to be evaluated in the dataframe specified by \code{data}, expected to act as a groupingvariable within each panel, typically used to distinguish differentgroups by varying graphical parameters like color and line type.Formally, if \code{groups} is specified, then \code{groups} alongwith \code{subscripts} is passed to the panel function, which isexpected to handle these arguments. Not all pre-defined panelfunctions know how to, but for high level functions where groupingis appropriate, the default panel functions are chosen so that theydo.It is very common to use a key (legend) when a groupingvariable is specified. See entries for \code{key}, \code{auto.key}and \code{\link{simpleKey}} for how to draw a key.}\item{auto.key}{A logical (indicating whether a key is to be drawn automatically whena grouping variable is present in the plot), or a list of parametersthat would be valid arguments to \code{\link{simpleKey}}. If\code{auto.key} is not \code{FALSE}, \code{groups} is non-null andthere is no \code{key} or \code{legend} argument specified in thecall, a key is created with \code{simpleKey} with\code{levels(groups)} as the first argument. (Note: this may notwork in all high level functions, but it does work for the oneswhere grouping makes sense with the default panel function)\code{simpleKey} uses the trellis settings to determine thegraphical parameters in the key, so this will be meaningful only ifthe settings are used in the plot as well.One disadvantage to using \code{key} (or even \code{simpleKey})directly is that the graphical parameters used in the key areabsolutely determined at the time when the ``trellis'' object iscreated. Consequently, if a plot once created is re-\code{print}edwith different settings, the parameter settings for the originaldevice will be used. However, with \code{auto.key}, the key isactually created at printing time, so the key settings will matchthe device settings.}\item{key}{A list of arguments that define a legend to be drawn on the plot.This list is used as an argument to the \code{\link{draw.key}}function, which produces a grid object eventually plotted by theprint method for ``trellis'' objects.There is also a less flexible but usually sufficient shortcutfunction \code{\link{simpleKey}} that can generate such a list, aswell as the argument \code{auto.key} that can be convenient in themost common situation where legends are used, namely when there is agrouping variable. To use more than one legend, or to have arbitrarylegends not constrained by the structure imposed by \code{key}, usethe \code{legend} argument.The position of the key can be controlled in either of two possibleways. If a component called \code{space} is present, the key ispositioned outside the plot region, in one of the four sides,determined by the value of \code{space}, which can be one of``top'', ``bottom'', ``left'' and ``right''. Alternatively, the keycan be positioned inside the plot region by specifying components\code{x}, \code{y} and \code{corner}. \code{x} and \code{y}determine the location of the corner of the key given by\code{corner}, which can be one of \code{c(0,0)}, \code{c(1,0)},\code{c(1,1)} and \code{c(0,1)}, which denote the corners of theunit square. \code{x} and \code{y} must be numbers between 0 and 1,giving coordinates with respect to the whole display area.The key essentially consists of a number of columns, possiblydivided into blocks, each containing some rows. The contents of thekey are determined by (possibly repeated) components named``rectangles'', ``lines'', ``points'' or ``text''. Each of thesemust be lists with relevant graphical parameters (see later)controlling their appearance. The \code{key} list itself can containgraphical parameters, these would be used if relevant graphicalcomponents are omitted from the other components.The length (number of rows) of each such column (except ``text''s)is taken to be the largest of the lengths of the graphicalcomponents, including the ones specified outside (see the entry for\code{rep} below for details on this). The ``text'' component has tohave a character or expression vector as its first component, andthe length of this vector determines the number of rows.The graphical components that can be included in \code{key} (andalso in the components named ``text'', ``lines'', ``points'' and``rectangles'' as appropriate) are:\itemize{\item \code{cex=1}\item \code{col="black"}\item \code{lty=1}\item \code{lwd=1}\item \code{font=1}\item \code{fontface}\item \code{fontfamily}\item \code{pch=8}\item \code{adj=0}\item \code{type="l"}\item \code{size=5}\item \code{angle=0}\item \code{density=-1}}\code{adj}, \code{angle} and \code{density} are currentlyunimplemented. \code{size} determines the width of columns ofrectangles and lines in character widths. \code{type} is relevantfor lines; \code{"l"} denotes a line, \code{"p"} denotes a point,and \code{"b"} and \code{"o"} both denote both together.Other possible components of \code{key} are:\describe{\item{\code{between}}{numeric vector giving the amount of space (character widths)surrounding each column (split equally on both sides),}\item{\code{title}}{string or expression giving a title for the key}\item{\code{rep}}{logical, defaults to \code{TRUE}. By default, it's assumed thatall columns in the key (except the ``text''s) will have the samenumber of rows, and all components are replicated to be as longas the longest. This can be suppressed by specifying\code{rep=FALSE}, in which case the length of each column willbe determined by components of that column alone.}\item{\code{cex.title}}{cex for the title}\item{\code{background}}{background color, defaults to default background}\item{\code{border}}{either a color for the border, or a logical. In the lattercase, the border color is black if \code{border} is\code{TRUE}, and no border is drawn if it is \code{FALSE} (thedefault)}\item{\code{transparent=FALSE}}{logical, whether key area should have a transparent background}\item{\code{columns}}{the number of columns column-blocks the key is to be dividedinto, which are drawn side by side.}\item{\code{betwen.columns}}{Space between column blocks, in addition to \code{between}.}\item{\code{divide}}{Number of point symbols to divide each line when \code{type} is\code{"b"} or \code{"o"} in \code{lines}.}}}\item{legend}{the legend argument can be useful if one wants to place more thanone key. It also allows one to use arbitrary ``grob''s (gridobjects) as legends.If used, \code{legend} must be a list, with an arbitrary number ofcomponents. Each component must be named one of ``left'', ``right'',``top'', ``bottom'' or ``inside''. The name ``inside'' can berepeated, but not the others. This name will be used to determinethe location for that component, and is similar to the \code{space}component of \code{key}. If \code{key} (or \code{colorkey} for\code{\link{levelplot}} and \code{\link{wireframe}}) is specified,their \code{space} component must not conflict with the name of anycomponent of \code{legend}.Each component of \code{legend} must have a component called\code{fun}. This can be a ``grob'', or a function or the name of afunction that produces a ``grob'' when called. If this functionexpects any arguments, they must be supplied as a list in anothercomponent called \code{args}. For components named ``inside'', therecan be additional components called \code{x}, \code{y} and\code{corner}, which work in the same way as it does for \code{key}.}\item{layout}{In general, a Trellis conditioning plot consists of several panelsarranged in a rectangular array, possibly spanning multiplepages. \code{layout} determines this arrangement.\code{layout} is a numeric vector giving the number of columns, rowsand pages in a multipanel display. By default, the number ofcolumns is the number of levels of the first conditioning variableand the number of rows is the number of levels of the secondconditioning variable. If there is only one conditioning variable,the default layout vector is \code{c(0,n)}, where \code{n} is thenumber of levels of the given vector. Any time the first value inthe layout vector is 0, the second value is used as the desirednumber of panels per page and the actual layout is computed fromthis, taking into account the aspect ratio of the panels and thedevice dimensions (via \code{par("din")}). The number of pages isby default set to as many as is required to plot all the panels. Ingeneral, giving a high value of \code{layout[3]} is not wastefulbecause blank pages are never created.}\item{main}{ typically a character string or expression or listdescribing the main title to be placed on top of each page. Defaultsto \code{NULL}. Can be a character string or expression, or a listwith components \code{label}, \code{cex}, \code{col} and\code{font}. The \code{label} tag can be omitted if it is the firstelement of the list. Expressions are treated as specification ofLaTeX-like markup as in \code{\link{plotmath}}.\code{main} can also be an arbitrary ``grob'' (grid graphicalobject).}\item{page}{ a function of one argument (page number) to be calledafter drawing each page. The function must be `grid-compliant', andis called with the whole display area as the default viewport.}\item{par.strip.text}{ list of graphical parameters to control thestrip text, possible components are \code{col}, \code{cex},\code{font} and \code{lines}. The first three control graphicalparameters while the last is a means of altering the height of thestrips. This can be useful, for example, if the strip labels(derived from factor levels, say) are double height (i.e., contains``\\n''-s) or if the default height seems too small or too large.}\item{prepanel}{function that takes the same arguments as the \code{panel} functionand returns a list, possibly containing components named\code{xlim}, \code{ylim}, \code{dx} and \code{dy} (and lessfrequently, \code{xat} and \code{yat}).The \code{xlim} and \code{ylim} components are similar to the highlevel \code{xlim} and \code{ylim} arguments (i.e., they are usuallya numeric vector of length 2 defining a range of values, or acharacter vector representing levels of a factor). If the\code{xlim} and \code{ylim} arguments are not explicitly specified(possibly as components in \code{scales}), then the actual limits ofthe panels are guaranteed to include the limits returned by theprepanel function. This happens globally if the \code{relation}component of \code{scales} is \code{"same"}, and on a panel by panelbasis otherwise. See \code{xlim} to see what forms of the components\code{xlim} and \code{ylim} are allowed.The \code{dx} and \code{dy} components are used for bankingcomputations in case \code{aspect} is specified as \code{"xy"}. Seedocumentation for the function \code{banking} for details regardinghow this is done.The return value of the prepanel function need not have all thecomponents named above; in case some are missing, they are replacedby the usual componentwise defaults.If \code{xlim} or \code{ylim} is a character vector (which isappropriate when the corresponding variable is a factor), thisimplicitly indicates that the scale should include the first\code{n} integers, where \code{n} is the length of \code{xlim} or\code{ylim}, as the case may be. The elements of the charactervector are used as the default labels for these \code{n} integers.Thus, to make this information consistent between panels, the\code{xlim} or \code{ylim} values should represent all the levels ofthe corresponding factor, even if some are not used within thatparticular panel.In such cases, an additional component \code{xat} or \code{yat} maybe returned by the \code{prepanel} function, which should be asubset of \code{1:n}, indicating which of the \code{n} values(levels) are actually represented in the panel. This is useful whencalculating the limits with \code{relation="free"} or\code{relation="sliced"} in \code{scales}.The prepanel function is responsible for providing a meaningfulreturn value when the \code{x}, \code{y} (etc.) variables arezero-length vectors. When nothing is appropriate, values of NAshould be returned for the \code{xlim} and \code{ylim} components.}\item{scales}{ list determining how the x- and y-axes (tick marks andlabels) are drawn. The list contains parameters in\code{name=value} form, and may also contain two other lists called\code{x} and \code{y} of the same form (described below).Components of \code{x} and \code{y} affect the respective axes only,while those in \code{scales} affect both. When parameters arespecified in both lists, the values in \code{x} or \code{y} areused. Note that certain high-level functions have defaults that arespecific to a particular axis (e.g., \code{bwplot} has\code{alternating=FALSE} for the y-axis only); these can beoverridden only by an entry in the corresponding component of\code{scales}.The possible components are :\describe{\item{\code{relation}}{character string that determines how axis limits are calculatedfor each panel. Possible values are \code{"same"} (default),\code{"free"} and \code{"sliced"}. For \code{relation="same"},the same limits, usually large enough to encompass all the data,are used for all the panels. For \code{relation="free"}, limitsfor each panel is determined by just the points in that panel.Behaviour for \code{relation="sliced"} is similar, except thatthe length (max - min) of the scales are constrained to remainthe same across panels.The determination of what axis limits are suitable for eachpanel can be controlled by the \code{prepanel} function, whichcan be overridden by \code{xlim}, \code{ylim} or\code{scales$limits}. If relation is not \code{"same"}, thevalue of \code{xlim} etc is normally ignored, except when it isa list, in which case it is treated as if its components werethe limit values obtained from the prepanel calculations foreach panel.}\item{\code{tick.number}}{Suggested number of ticks (ignored for a factor, shingle orcharacter vector, in which case there's no natural rule forleaving out some of the labels. But see \code{xlim}).}\item{\code{draw}}{logical, defaults to \code{TRUE}, whether to draw the axis atall.}\item{\code{alternating}}{logical specifying whether axis labels should alternate from oneside of the group of panels to the other. For finer control,alternating can be a vector (replicated to be as long as thenumber of rows or columns per page) consisting of the followingnumbers\itemize{\item 0: do not draw tick labels\item 1: bottom/left\item 2: top/right\item 3: both.}\code{alternating} applies only when \code{relation="same"}.The default is \code{TRUE}, or equivalently, \code{c(1, 2)}}\item{\code{limits}}{same as xlim and ylim.}\item{\code{at}}{ location of tick marks along the axis (in nativecoordinates), or a list as long as the number of panelsdescribing tick locations for each panel.}\item{\code{labels}}{Labels (strings or expressions) to go along with \code{at}. Canbe a list like \code{at} as well.}\item{\code{cex}}{numeric multiplier to control character sizes for axis labels.Can be a vector of length 2, to control left/bottom andright/top separately.}\item{\code{font}, \code{fontface}, \code{fontfamily}}{specifies font for axis labels.}\item{\code{tck}}{numeric to control length of tick marks. Can be a vector oflength 2, to control left/bottom and right/top separately.}\item{\code{col}}{color of ticks and labels.}\item{\code{rot}}{Angle by which the axis labels are to be rotated. Can be avector of length 2, to control left/bottom and right/topseparately.}\item{\code{abbreviate}}{logical, whether to abbreviate the labels using\code{abbreviate}. Can be useful for long labels (e.g., infactors), especially on the x-axis.}\item{\code{minlength}}{argument passed to \code{abbreviate} if \code{abbreviate=TRUE}.}\item{\code{log}}{whether to use a log scale. Defaults to \code{FALSE}, otherpossible values are any number that works as a base for takinglogarithm, \code{TRUE}, equivalent to 10, and \code{"e"} (fornatural logarithm). Note that in this case the values passed tothe panel function are already transformed, so all computationsdone inside the panel funtion will be affected accordingly. Forexample, \code{panel.lmline} will fit a line to the transformedvalues.}\item{\code{format}}{the \code{format} to use for POSIXct variables. See\code{\link{strptime}} for description of valid values.}\item{\code{axs}}{character, ``r'' or ``i''. In the latter case, the axis limitsare calculated as the exact data range, instead of being paddedon either side. (May not always work as expected.)}}Note that much of the function of \code{scales} is accomplished by\code{pscales} in \code{splom}.}\item{skip}{logical vector (default \code{FALSE}), replicated to be as long asthe number of panels (spanning all pages). For elements that are\code{TRUE}, the corresponding panel position is skipped; i.e.,nothing is plotted in that position. The panel that was supposed tobe drawn there is now drawn in the next available panel position,and the positions of all the subsequent panels are bumped upaccordingly. This is often useful for arranging plots in aninformative manner.}\item{strip}{logical flag or function. If \code{FALSE}, strips are not drawn.Otherwise, strips are drawn using the \code{strip} function, whichdefaults to \code{strip.default}. See documentation of\code{strip.default} to see the arguments that are available to thestrip function.}\item{sub}{character string or expression (or a ``grob'') for a subtitle to beplaced at the bottom of each page. See entry for \code{main} forfiner control options.}\item{subscripts}{logical specifying whether or not a vector named \code{subscripts}should be passed to the panel function. Defaults to \code{FALSE},unless \code{groups} is specified, or if the panel function acceptsan argument named \code{subscripts}. (One should be careful whendefining the panel function on-the-fly.)}\item{subset}{logical or integer indexing vector (can be specified in terms ofvariables in \code{data}). Only these rows of \code{data} will beused for the plot. If \code{subscripts} is \code{TRUE}, thesubscripts will provide indices to the rows of data before thesubsetting is done. Whether levels of factors in the data framethat are unused after the subsetting will be dropped depends on the\code{drop.unused.levels} argument.}\item{xlab}{ character string or expression (or a ``grob'') givinglabel for the x-axis. Defaults to the expression for \code{x} in\code{formula}. Can be specified as \code{NULL} to omit the labelaltogether. Finer control is possible, as described in the entryfor \code{main}, with the additional feature that if the\code{label} component is omitted from the list, it is replaced bythe default \code{xlab}.}\item{xlim}{ Normally a numeric vector of length 2 (possibly aDateTime object) giving minimum and maximum for the x-axis, or, acharacter vector, expected to denote the levels of \code{x}. Thelatter form is interpreted as a range containing c(1, length(xlim)),with the character vector determining labels at tick positions\code{1:length(xlim)}\code{xlim} could also be a list, with as many components as thenumber of panels (recycled if necessary), with each component asdescribed above. This is meaningful only when\code{scales$x$relation} is "free" or "sliced", in which case theseare treated as if they were the corresponding limit componentsreturned by prepanel calculations.}\item{ylab}{ character string or expression (or ``grob'') giving labelfor the y-axis. Defaults to the expression for \code{y} in\code{formula}. Fine control is possible, see entry for\code{xlab}.}\item{ylim}{ similar to \code{xlim}, applied to the y-axis. }\item{drop.unused.levels}{logical indicating whether the unused levels of factors will bedropped. Unused levels are usually dropped, but it is sometimesappropriate to suppress dropping to preserve an useful layout. Forfiner control, this argument could also be list containingcomponents \code{cond} and \code{data}, both logical, indicatingdesired behaviour for conditioning variables and data variablesrespectively. The default is given by\code{lattice.getOption("drop.unused.levels")} , which is initiallyset to \code{TRUE} for both components.}\item{par.settings}{a list that could be supplied to \code{\link{trellis.par.set}}.This enables the user to attach some display settings to the trellisobject itself rather than change the settings globally. When theobject is printed, these settings are temporarily in effect for theduration of the plot, after which the settings revert back towhatever it was before.}\item{perm.cond}{numeric vector, a permutation of \code{1:n}, where \code{n} is thenumber of conditioning variables. By default, the order in whichpanels are drawn depends on the order of the conditioning variablesspecified in the \code{formula}. \code{perm.cond} can modify thisorder. If the trellis display is thought of as an\code{n}-dimensional array, then during printing, its dimensions arepermuted using \code{perm.cond} as the \code{perm} argument to\code{\link{aperm}}.}\item{index.cond}{While \code{perm.cond} permutes the dimensions of themultidimensional array of panels, \code{index.cond} can be used tosubset (or reorder) margins of that array. \code{index.cond} can bea list or a function, with behaviour in each case describedbelow.The panel display order within each conditioning variable depends onthe order of their levels. \code{index.cond} can be used to choosea `subset' (in the R sense) of these levels, which is then used asthe display order for that variable. If \code{index.cond} is alist, it has to be as long as the number of conditioning variables,and the \code{i}-th component has to be a valid indexing vector forthe integer vector \code{1:nlevels(g_i)} (which can, among otherthings, repeat some of the levels or drop some altogether). Theresult of this indexing determines the order of panels within thatconditioning variable. To keep the order of a particular variableunchanged, the corresponding component must be set to \code{TRUE}.Note that the components of \code{index.cond} are in the order ofthe conditioning variables in the original call, and is not affectedby \code{perm.cond}.Another possibility is to specify \code{index.cond} as a function.In this case, this function is called once for each panel,potentially with all arguments that are passed to the panel functionfor that panel. (More specifically, if this function has a\code{\dots} argument, then all panel arguments are passed,otherwise, only named arguments that match are passed.) For a singleconditioning variable, the levels of that variable are then sortedso that these values are in ascending order. For multipleconditioning variables, the order for each variable is determined byfirst taking the average over all other conditioning variables.Although they can be supplied in high level function calls directly,it is more typical to use \code{perm.cond} and \code{index.cond} toupdate an existing ``trellis'' object, thus allowing it to bedisplayed in a different arrangement without re-calculating the datasubsets that go into each panel. In the \code{update} method, bothcan be set to \code{NULL}, which reverts these back to theirdefaults.}\item{ default.scales }{list giving the default values of \code{scales} for a particularhigh level function. This should not be of any interest to thenormal user, but may be helpful when defining other functions thatact as a wrapper to one of the high level lattice functions.}\item{\dots}{ other arguments, passed to the panel function.The arguments \code{horizontal} and \code{panel.groups} aredocumented here to avoid confusion, but they are actually notrecognised by these high level functions. Instead, they are passedalong to the panel function, as are any other unrecognizedarguments.}}\value{An object of class ``trellis''. The `update' method can be used toupdate components of the object and the `print' method (usually calledby default) will plot it on an appropriate plotting device.}\details{The structure of the plot that is produced is mostly controlled by the\code{formula} argument. For each unique combination of the levels ofthe conditioning variables \code{g1, g2, \dots}, a separate panel isproduced using the points \code{(x,y)} for the subset of the data(also called packet) defined by that combination. The panels can bethough of as a 3-dimensional array, consisting of one 2-dimensionalmatrix per page. The dimesions of this array are determined by the\code{layout} argument.If there are no conditioning variables, the plot produced consists ofa single panel.The coordinate system used by lattice by default is like a graph,with the origin at the bottom left, with axes increasing to left andup. In particular, panels are by default drawn starting from thebottom left corner, going right and then up; unless \code{as.table =TRUE}, in which case panels are drawn from the top left corner,going right and then down. One might wish to set a global preferencefor a table-like arrangement by changing the default to\code{as.table=TRUE}; this can be done by setting\code{lattice.options(default.args = list(as.table = TRUE))}. Infact, default values can be set in this manner for the followingarguments: \code{as.table}, \code{aspect}, \code{between},\code{page}, \code{main}, \code{sub}, \code{par.strip.text},\code{layout}, \code{skip} and \code{strip}. Note that these globaldefaults are sometimes overridden by individual functions.The order of the panels depends on the order in which the conditioningvariables are specified, with \code{g1} varying fastest. Within aconditioning variable, the order depends on the order of the levels(which for factors is usually in alphabetical order). Both of theseorders can be modified using the \code{index.cond} and\code{perm.cond} arguments, possibly using the \code{update} method.}\note{Most of the arguments documented here are also applicable for theother high level functions in the lattice package. These are notdescribed in any detail elsewhere unless relevant, and this should beconsidered the canonical documentation for such arguments.Any arguments passed to these functions and not recognized by themwill be passed to the panel function. Most predefined panel functionshave arguments that customize its output. These arguments aredescribed only in the help pages for these panel functions, but canusually be supplied as arguments to the high level plot.}\seealso{\code{\link{Lattice}},\code{\link{print.trellis}},\code{\link{shingle}},\code{\link{banking}},\code{\link{reshape}},\code{\link{panel.xyplot}},\code{\link{panel.bwplot}},\code{\link{panel.barchart}},\code{\link{panel.dotplot}},\code{\link{panel.stripplot}},\code{\link{panel.superpose}},\code{\link{panel.loess}},\code{\link{panel.linejoin}},\code{\link{strip.default}},\code{\link{simpleKey}}\code{\link{trellis.par.set}}}\author{ Deepayan Sarkar \email{Deepayan.Sarkar@R-project.org}}\examples{require(stats)## Tonga Trench EarthquakesDepth <- equal.count(quakes$depth, number=8, overlap=.1)xyplot(lat ~ long | Depth, data = quakes)update(trellis.last.object(), aspect = "iso")## Examples with data from `Visualizing Data' (Cleveland)## (obtained from Bill Cleveland's Homepage :## http://cm.bell-labs.com/cm/ms/departments/sia/wsc/, also## available at statlib)EE <- equal.count(ethanol$E, number=9, overlap=1/4)## Constructing panel functions on the fly; prepanelxyplot(NOx ~ C | EE, data = ethanol,prepanel = function(x, y) prepanel.loess(x, y, span = 1),xlab = "Compression Ratio", ylab = "NOx (micrograms/J)",panel = function(x, y) {panel.grid(h=-1, v= 2)panel.xyplot(x, y)panel.loess(x,y, span=1)},aspect = "xy")## with and without bankingplot <- xyplot(sunspot.year ~ 1700:1988, xlab = "", type = "l",scales = list(x = list(alternating = 2)),main = "Yearly Sunspots")print(plot, position = c(0, .3, 1, .9), more = TRUE)print(update(plot, aspect = "xy", main = "", xlab = "Year"),position = c(0, 0, 1, .3))## Multiple variables in formula for grouped displaysxyplot(Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width | Species,data = iris, scales = "free", layout = c(2, 2),auto.key = list(x = .6, y = .7, corner = c(0, 0)))## user defined panel functionsstates <- data.frame(state.x77,state.name = dimnames(state.x77)[[1]],state.region = state.region)xyplot(Murder ~ Population | state.region, data = states,groups = state.name,panel = function(x, y, subscripts, groups)ltext(x = x, y = y, label = groups[subscripts], cex=1,fontfamily = "HersheySans"))barchart(yield ~ variety | site, data = barley,groups = year, layout = c(1,6),ylab = "Barley Yield (bushels/acre)",scales = list(x = list(abbreviate = TRUE,minlength = 5)))barchart(yield ~ variety | site, data = barley,groups = year, layout = c(1,6), stack = TRUE,auto.key = list(points = FALSE, rectangles = TRUE, space = "right"),ylab = "Barley Yield (bushels/acre)",scales = list(x = list(rot = 45)))bwplot(voice.part ~ height, data=singer, xlab="Height (inches)")dotplot(variety ~ yield | year * site, data=barley)dotplot(variety ~ yield | site, data = barley, groups = year,key = simpleKey(levels(barley$year), space = "right"),xlab = "Barley Yield (bushels/acre) ",aspect=0.5, layout = c(1,6), ylab=NULL)stripplot(voice.part ~ jitter(height), data = singer, aspect = 1,jitter = TRUE, xlab = "Height (inches)")## Interaction Plotbwplot(decrease ~ treatment, OrchardSprays, groups = rowpos,panel = "panel.superpose",panel.groups = "panel.linejoin",xlab = "treatment",key = list(lines = Rows(trellis.par.get("superpose.line"),c(1:7, 1)),text = list(lab = as.character(unique(OrchardSprays$rowpos))),columns = 4, title = "Row position"))}\keyword{hplot}