[R] triangle contour plots

Duncan Murdoch murdoch at stats.uwo.ca
Mon Jun 18 15:58:22 CEST 2007


On 6/18/2007 8:12 AM, Robin Hankin wrote:
> Suppose I have three numbers p1, p2, p3 with
> 0 <= p1,p2,p3 <= 1  and p1+p2+p3=1,
> and a  function  f=f(p1,p2,p3)   =  f(p1,p2,1-p1-p2).
> 
> How to draw a contour plot of f() on the p1+p2+p3=1 plane,
> that is, an equilateral triangle?

The usual contour function leaves blanks where you give it NA values, so 
you could put the f values into a rectangular array with NA outside the 
triangle and use that.

I don't know how you're thinking of displaying things, but one possible 
transformation from (x,y) to (p1, p2, p3) would be

  f <- function(p1, p2, p3) p3  # just to illustrate

  maxy <- sin(pi/3)
  x <- seq(0,1,len=100)
  y <- seq(0, maxy, len=100)
  p1 <- outer(x,y, function(x,y) x - y/maxy/2)
  p2 <- outer(x,y, function(x,y) y/maxy)
  p3 <- 1-p1-p2
  z <- ifelse(0 < p1 & 0 < p3, f(p1,p2,p3), NA)
  contour(x,y,z)

This puts p1==1 at the bottom right, p2==1 at the top, and p3==1 at the 
bottom left.

Duncan Murdoch

> 
> Functions triplot(), triangle.plot(), and ternaryplot()  give
> only  scatterplots, AFAICS
> 
> 
> 
> 
> 
> --
> Robin Hankin
> Uncertainty Analyst
> National Oceanography Centre, Southampton
> European Way, Southampton SO14 3ZH, UK
>   tel  023-8059-7743
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list