

   AAFFMM CCoommppoossiittiioonnss ooff AApphhyyrriicc SSkkyyee LLaavvaass

   AArrgguummeennttss::

          A: Percentage of sodium and potassium oxides

          F: Percentage of iron oxide

          M: Percentage of magnesium oxide

   SSUUMMMMAARRYY::

        The `Skye' data frame has 23 rows and 3 columns.

   DDAATTAA DDEESSCCRRIIPPTTIIOONN::

        This data frame contains the following columns:

   SSOOUURRCCEE::

        J. Aitchison (1986) The Statistical Analysis of Compo-
        sitional Data.  Chapman and Hall, p.360.  R.N. Thomp-
        son, J. Esson and A.C. Duncan (1972) Major element
        chemical variation in the Eocene lavas of the Isle of
        Skye.  J. Petrology 13, 219-253.

   EExxaammpplleess::

        # ternary() is from the on-line answers.
        ternary <- function(X, pch = par("pch"), lcex = 1,
                            add = F, ord = 1:3, ...)
        {
          X <- as.matrix(X)
          if(any(X) < 0) stop("X must be non-negative")
          s <- drop(X
          if(any(s<=0)) stop("each row of X must have a positive sum")
          if(max(abs(s-1)) > 1e-6) {
            warning("row(s) of X will be rescaled")
            X <- X / s
          }
          X <- X[, ord]
          s3 <- sqrt(1/3)
          if(!add)
          {
            oldpty <- par("pty")
            on.exit(par(pty=oldpty))
            par(pty="s")
            plot(c(-s3, s3), c(0.5-s3, 0.5+s3), type="n", axes=F,
                 xlab="", ylab="")
            polygon(c(0, -s3, s3), c(1, 0, 0), density=0)
            lab <- NULL
            if(!is.null(dn <- dimnames(X))) lab <- dn[[2]]
            if(length(lab) < 3) lab <- as.character(1:3)
            eps <- 0.05 * lcex
            text(c(0, s3+eps*0.7, -s3-eps*0.7),
                 c(1+eps, -0.1*eps, -0.1*eps), lab, cex=lcex)
          }
          points((X[,2] - X[,3])*s3, X[,1], ...)
        }

        data(Skye)
        ternary(as.matrix(Skye)/100, ord=c(1,3,2))

