[R] ternary diagrams with contours

Petr Pikal petr.pikal at precheza.cz
Mon Jan 19 08:14:25 CET 2004


Hi

with
help.search("ternary")

I have got

"ternaryplot" in package "vcd"

and below is some code for ternary diagram which was in help 
post several years ago. I do not know if and how it works, I have 
not tried it a long time.

#----------------------------------------------------------------------------
-----
# funkce pro kresleni ternarniho diagramu
# Colin Farrow
# Computing Service, University of Glasgow, Glasgow G12 8QQ
# c.farrow at compserv.gla.ac.uk


tri<-
function(a, f, m, symb = 2, grid = F, ...)
{
 ta <- paste(substitute(a))
 tf <- paste(substitute(f))
 tm <- paste(substitute(m))

 tot <- 100/(a + f +m)
 b <- f * tot
 y <- b * .878
 x <- m * tot + b/2
 par(pty = "s")
 oldcol <- par("col")
 plot(x, y, axes = F, xlab = "", ylab = "", xlim = c(-10, 110), ylim
   = c(-10, 110), type = "n", ...)
        points(x,y,pch=symb)
 par(col = oldcol)
 trigrid(grid)
 text(-5, -5, ta)
 text(105, -5, tm)
 text(50, 93, tf)
 par(pty = "m")
 invisible()
}
"trigrid"<-
function(grid = F)
{
 lines(c(0, 50, 100, 0), c(0, 87.8, 0, 0))	#draw frame
 if(!grid) {
  for(i in 1:4 * 20) {
   lines(c(i, i - 1), c(0, 2 * .878))	#side a-c (base)
   lines(c(i, i + 1), c(0, 2 * .878))
   T.j <- i/2	#side a-b (left)
   lines(c(T.j, T.j + 2), c(i * .878, i * .878))
   lines(c(T.j, T.j + 1), c(i * .878, (i - 2) * .878))
   T.j <- 100 - i/2	#side b-c (right)
   lines(c(T.j, T.j - 2), c(i * .878, i * .878))
   lines(c(T.j, T.j - 1), c(i * .878, (i - 2) * .878))
  }
 }
 else {
  for(i in 1:4 * 20) {
# draw dotted grid
   lines(c(i, i/2), c(0, i * .878), lty = 4, col = 3)	#
   lines(c(i, (50 + i/2)), c(0, .878 * (100 - i)), lty = 4,
    col = 3)	# /
   lines(c(i/2, (100 - i/2)), c(i * .878, i * .878), lty
     = 4, col = 3)	# -
  }
  par(lty = 1, col = 1)
 }
}

Petr Pikal
petr.pikal at precheza.cz




More information about the R-help mailing list