\HeaderA{parallelCoordinates}{Parallel coordinates: Plotting each observation across all variables}{parallelCoordinates}
\keyword{hplot}{parallelCoordinates}
\begin{Description}\relax
To view multi-dimensional data, a parallel coordinates plot is made
such that each row is treated as
an observation which is plotted across all column variables.  The two
dimensional plot which results has the column variables on the horizontal
axis and the values of the column variables on the vertical axis.  Care
should be taken to note that each line drawn corresponds to a row
observation.  Also the units of measurements should be the same among
all column variables. Note that the row observations can be grouped
visually by specifying group line options such as line type, color, or
width.  The data can also be scaled to have a range of (0,1).
\end{Description}
\begin{Usage}
\begin{verbatim}
  parallelCoordinates(x, varlabpos=1:dim(x)[2],
                       variable.names=colnames(x),my.ylab ="",
                       my.ylim =c(min(x),max(x)),
                       at.y=seq(min(x), max(x),
                            by=(max(x)-min(x))/20),
                       each.ylab=at.y, scaled = FALSE,
                       group = rep(1, dim(x)[1]),
                       group.lty=group, group.col=group,
                       group.lwd=group, superimpose=FALSE,...)

\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{x}] matrix of the data (rows are the observations \& columns are
the variables) 
\item[\code{varlabpos}] numerical vector denoting the position of the
variables/variable labels on the horizontal axis; default is a vector of 1 to the
number of variables
\item[\code{variable.names}] a vector of strings denoting the names of each
variable; default value is the column names of the input matrix, x
\item[\code{my.ylab}] character string denoting the name/label of the
vertical y-axis; default value is "Values"
\item[\code{my.ylim}] two-dimensional vector denoting the range of the
vertical y-axis, ie, the range of the variables; default is the
vector of the min and the max of the input matrix, x
\item[\code{at.y}] vector of the vertical y-axis values at which labels will be
shown on the plot; default is a vector of the minimum to the maximum
by increments of one-twentieth of the difference between the mininum
and the maximum
\item[\code{each.ylab}] vector of the vertical y-axis labels; default is the
numerical values of at.y
\item[\code{scaled}] boolean; if TRUE, then the data is scaled to a range of [0,1]
\item[\code{group}] a vector of indicating which group the row observations
are in; default is all the row observations are in one group 
\item[\code{group.lty}] vector corresponding to each data row's line type
corresponding to the group that each row observation is in; default
is the vector value of group
\item[\code{group.col}] vector corresponding to each data row's line type
corresponding to the group that each row observation is in; default
is the vector value of group
\item[\code{group.lwd}] vector corresponding to each data row's line type
corresponding to the group that each row observation is in; default
is the vector value of group
\item[\code{superimpose}] Boolean, if TRUE then parallel coordinate lines
will be added to the existing plot; otherwise a new parallel
coordinate plot will be made; default is FALSE
\item[\code{...}] \code{plot} options
\end{ldescription}
\end{Arguments}
\begin{Value}
A parallel coordinates plot in which row observations are plotted
across all column variables in a plot with x-axis= names of the column
variables and y-axis=values of the column variables.
\end{Value}
\begin{Section}{WARNING}
The dataset may have to be subsetted before
implementing this function because the plot may take a long time to
finish and may not be readable.

If the at.y option is not within the range of the column variables,
then the range will be changed appropriately, but the interval or the
difference between two elements of at.y will remain the same in order
to keep the specified spacings of the y labels/tick marks.

If the each.ylab vector is different in length with the number of tick
marks specified by at.y for the vertical axis, then by default the
each.ylab will be the values of at.y.  In other words, the labels will
be the number values specified by at.y.
\end{Section}
\begin{Author}\relax
A.J. Rossini, J.Y. Wan
\end{Author}
\begin{SeeAlso}\relax
\code{\LinkA{pairs}{pairs}},
\code{\LinkA{plot}{plot}},
\code{\LinkA{ImageParCoord}{ImageParCoord}}
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
if (require(rfcdmin)){
  data.there<-is.element("MC.053",objects())
    if ((sum(data.there) != length(data.there))) {
      ## obtaining the FCS objects from FHCRC data
      data(MC.053min)
    }
 
  dataMC<-MC.053@data

 
  if (interactive()) {
   par(mfrow=c(2,2))

    ### subset the data to the first 5 observations because it is too huge
    parallelCoordinates(dataMC[c(1:5),-6])
    ### the first 2 rows are a group and the last 3 rows are a different group
    parallelCoordinates(dataMC[c(1:5),-6], group=c(1,1,2,2,2))
    
    ### the same plot is scaled to 0,1 range
    parallelCoordinates(dataMC[c(1:5),-6], scaled=TRUE)
    parallelCoordinates(dataMC[c(1:5),-6], scaled=TRUE, group=c(1,1,2,2,2))
    
    parallelCoordinates(dataMC[c(1:5),1:4])
    ## changing the positions of the variables to the 1st, 5th, 8th, 16th
    ## positions on the horizontal x-axis
    parallelCoordinates(dataMC[c(1:5),1:4], varlabpos=c(1, 5, 8, 16))
    
    parallelCoordinates(dataMC[c(1:5),1:3])
    ## having the variable positions out of order of how they are plotted
    parallelCoordinates(dataMC[c(1:5),1:3], varlabpos=c(1, 15, 8))
    
    ## changing the labels of the vertical y-axis
    parallelCoordinates(dataMC[c(1:5),1:3], at.y=c(0, 500,
    1000),my.ylim=c(0, 1000),
    each.ylab=c("zero", "five hundred", "one thou"))
  }
}
\end{ExampleCode}
\end{Examples}

