# xyz.coords: Extracting Plotting Structures

## Description

Utility for obtaining consistent x, y and z coordinates and labels for three dimensional (3D) plots.

## Usage

 ```1 2 3``` ```xyz.coords(x, y = NULL, z = NULL, xlab = NULL, ylab = NULL, zlab = NULL, log = NULL, recycle = FALSE, setLab = TRUE) ```

## Arguments

 `x, y, z` the x, y and z coordinates of a set of points. Both `y` and `z` can be left at `NULL`. In this case, an attempt is made to interpret `x` in a way suitable for plotting. If the argument is a formula `zvar ~ xvar + yvar`, `xvar`, `yvar` and `zvar` are used as x, y and z variables; if the argument is a list containing components `x`, `y` and `z`, these are assumed to define plotting coordinates; if the argument is a matrix or `data.frame` with three or more columns, the first is assumed to contain the x values, the 2nd the y ones, and the 3rd the z ones – independently of any column names that `x` may have. Alternatively two arguments `x` and `y` can be provided (leaving `z = NULL`). One may be real, the other complex; in any other case, the arguments are coerced to vectors and the values plotted against their indices. `xlab, ylab, zlab` names for the x, y and z variables to be extracted. `log` character, `"x"`, `"y"`, `"z"` or combinations. Sets negative values to `NA` and gives a warning. `recycle` logical; if `TRUE`, recycle (`rep`) the shorter ones of `x`, `y` or `z` if their lengths differ. `setLab` logical indicating if the resulting `xlab` and `ylab` should be constructed from the “kind” of `(x,y)`; otherwise, the arguments `xlab` and `ylab` are used.

## Value

A list with the components

 `x` numeric (i.e., `double`) vector of abscissa values. `y` numeric vector of the same length as `x`. `z` numeric vector of the same length as `x`. `xlab` `character(1)` or `NULL`, the axis label of `x`. `ylab` `character(1)` or `NULL`, the axis label of `y`. `zlab` `character(1)` or `NULL`, the axis label of `z`.

## Author(s)

Uwe Ligges and Martin Maechler

`xy.coords` for 2D.
 ``` 1 2 3 4 5 6 7 8 9 10``` ```xyz.coords(data.frame(10*1:9, -4), y = NULL, z = NULL) xyz.coords(1:5, stats::fft(1:5), z = NULL, xlab = "X", ylab = "Y") y <- 2 * (x2 <- 10 + (x1 <- 1:10)) xyz.coords(y ~ x1 + x2, y = NULL, z = NULL) xyz.coords(data.frame(x = -1:9, y = 2:12, z = 3:13), y = NULL, z = NULL, log = "xy") ##> Warning message: 2 x values <= 0 omitted ... ```