Re: [R-sig-phylo] edge color in phylomorphospace3d

2014-06-10 Thread Paolo Piras
Thankyou very much to all for your effort in improving the function!
all the best
paoo

Da: Liam J. Revell 
Inviato: martedì 10 giugno 2014 15.13
A: Jonas Eberle; Paolo Piras; r-sig-phylo@r-project.org
Oggetto: Re: edge color in phylomorphospace3d

Thanks Jonas.

I had just added this to phytools. Not yet on CRAN but more details
(including how to use it) can be seen here:
http://blog.phytools.org/2014/06/coloring-edges-in-phylomorphospace3d.html.

All the best, Liam

Liam J. Revell, Assistant Professor of Biology
University of Massachusetts Boston
web: http://faculty.umb.edu/liam.revell/
email: liam.rev...@umb.edu
blog: http://blog.phytools.org

On 6/10/2014 3:26 AM, Jonas Eberle wrote:
> Dear Paolo,
>
> I modified the phylomorphospace3d code some time ago to be able to plot
> colored branches (see below). You can use pointcol and edgecol to color
> the plot. These can be simple color specifications (such as "black") or
> vectors of colors that have the length of your number of tips or edges,
> respectively.
>
> Thank you Liam for this piece of code! It's really usefull for me! I
> hope I didn't spoil your code too much :)
>
> Jonas
>
>
>
>
> ColoredPhylomorphospace3d <- function (tree, X, A = NULL, label = TRUE,
> pointcol="black", edgecol="black", control = list(),
>method = c("dynamic", "static"), ...)
> {
>method <- method[1]
>if (class(tree) != "phylo")
>  stop("tree object must be of class 'phylo.'")
># controls festlegen
>con = list(spin = TRUE, axes = TRUE, box = TRUE, simple.axes = FALSE,
>   lwd = 1, ftype = "reg")
>con[(namc <- names(control))] <- control
>if (con$simple.axes)
>  con$box <- con$axes <- FALSE
>con$ftype <- which(c("off", "reg", "b", "i", "bi") == con$ftype) -
>  1
>if (is.null(A))
>  A <- apply(X, 2, function(x, tree) fastAnc(tree, x),
> tree = tree)
>else A <- A[as.character(1:tree$Nnode + length(tree$tip)),
>]
>x <- y <- z <- matrix(NA, nrow(tree$edge), 2)
>X <- X[tree$tip.label, ]
>for (i in 1:length(tree$tip)) {
>  x[tree$edge[, 2] == i, 2] <- X[i, 1]
>  y[tree$edge[, 2] == i, 2] <- X[i, 2]
>  z[tree$edge[, 2] == i, 2] <- X[i, 3]
>}
>for (i in length(tree$tip) + 1:tree$Nnode) {
>  x[tree$edge[, 1] == i, 1] <- x[tree$edge[, 2] == i,
> 2] <- A[as.character(i), 1]
>  y[tree$edge[, 1] == i, 1] <- y[tree$edge[, 2] == i,
> 2] <- A[as.character(i), 2]
>  z[tree$edge[, 1] == i, 1] <- z[tree$edge[, 2] == i,
> 2] <- A[as.character(i), 3]
>}
>if (is.null(colnames(X)))
>  colnames(X) <- c("x", "y", "z")
>if (method == "dynamic") {
>  params <- get("r3dDefaults")
>  plot3d(rbind(X, A), xlab = colnames(X)[1], ylab = colnames(X)[2],
> zlab = colnames(X)[3], axes = con$axes, box = con$box,
> params = params)
>  spheres3d(X, radius = 0.02 * mean(apply(X, 2, max) -
>  apply(X, 2, min)), col=pointcol)
>  for (i in 1:nrow(tree$edge)) segments3d(x[i, ], y[i, ], z[i, ], lwd
> = con$lwd, col=edgecol[i])
>  ms <- colMeans(X)
>  rs <- apply(rbind(X, A), 2, range)
>  if (con$simple.axes) {
>lines3d(x = rs[, 1], y = c(rs[1, 2], rs[1, 2]),
>z = c(rs[1, 3], rs[1, 3]))
>lines3d(x = c(rs[1, 1], rs[1, 1]), y = rs[, 2],
>z = c(rs[1, 3], rs[1, 3]))
>lines3d(x = c(rs[1, 1], rs[1, 1]), y = c(rs[1, 2],
> rs[1, 2]), z = rs[, 3])
>  }
>  rs <- rs[2, ] - rs[1, ]
>  for (i in 1:length(tree$tip)) {
>adj <- 0.03 * rs * (2 * (X[i, ] > ms) - 1)
>if (con$ftype)
>  text3d(X[i, ] + adj, texts = tree$tip.label[i],
> font = con$ftype)
>  }
>  if (con$spin) {
>xx <- spin3d(axis = c(0, 0, 1), rpm = 10)
>play3d(xx, duration = 5)
>invisible(xx)
>  }
>  else invisible(NULL)
>}
>else if (method == "static") {
>  if (hasArg(angle))
>angle <- list(...)$angle
>  else angle <- 30
>  if (hasArg(xlim))
>xlim <- list(...)$xlim
>  else xlim <- NULL
>  if (hasArg(ylim))
>ylim <- list(...)$ylim
>  else ylim <- NULL
>  if (hasArg(zlim))
>zlim <- list(...)$zlim
>  else zlim = NULL
>  xx <- scatterplot3d(X, xlab = colnames(X)[1], zlab = colnames(X)[3],
>  pch = 19, angle = angle, ylab = colnames(X)[2],
>  asp = 1, cex.symbols = 1.3, xlim = xlim, ylim =
> ylim,
>  zlim = zlim)
>  aa <- xx$xyz.convert(A)
>  points(aa$x, aa$y, pch = 19, cex = 0.8)
>  for (i in 1:nrow(tree$edge)) {
>aa <- xx$xyz.convert(x[i, ], y[i, ], z[i, ])
>lines(aa$x, aa$y, lwd = 2)
>  }
>  for (i in 1

Re: [R-sig-phylo] edge color in phylomorphospace3d

2014-06-10 Thread Liam J. Revell

Thanks Jonas.

I had just added this to phytools. Not yet on CRAN but more details 
(including how to use it) can be seen here: 
http://blog.phytools.org/2014/06/coloring-edges-in-phylomorphospace3d.html.


All the best, Liam

Liam J. Revell, Assistant Professor of Biology
University of Massachusetts Boston
web: http://faculty.umb.edu/liam.revell/
email: liam.rev...@umb.edu
blog: http://blog.phytools.org

On 6/10/2014 3:26 AM, Jonas Eberle wrote:

Dear Paolo,

I modified the phylomorphospace3d code some time ago to be able to plot
colored branches (see below). You can use pointcol and edgecol to color
the plot. These can be simple color specifications (such as "black") or
vectors of colors that have the length of your number of tips or edges,
respectively.

Thank you Liam for this piece of code! It's really usefull for me! I
hope I didn't spoil your code too much :)

Jonas




ColoredPhylomorphospace3d <- function (tree, X, A = NULL, label = TRUE,
pointcol="black", edgecol="black", control = list(),
   method = c("dynamic", "static"), ...)
{
   method <- method[1]
   if (class(tree) != "phylo")
 stop("tree object must be of class 'phylo.'")
   # controls festlegen
   con = list(spin = TRUE, axes = TRUE, box = TRUE, simple.axes = FALSE,
  lwd = 1, ftype = "reg")
   con[(namc <- names(control))] <- control
   if (con$simple.axes)
 con$box <- con$axes <- FALSE
   con$ftype <- which(c("off", "reg", "b", "i", "bi") == con$ftype) -
 1
   if (is.null(A))
 A <- apply(X, 2, function(x, tree) fastAnc(tree, x),
tree = tree)
   else A <- A[as.character(1:tree$Nnode + length(tree$tip)),
   ]
   x <- y <- z <- matrix(NA, nrow(tree$edge), 2)
   X <- X[tree$tip.label, ]
   for (i in 1:length(tree$tip)) {
 x[tree$edge[, 2] == i, 2] <- X[i, 1]
 y[tree$edge[, 2] == i, 2] <- X[i, 2]
 z[tree$edge[, 2] == i, 2] <- X[i, 3]
   }
   for (i in length(tree$tip) + 1:tree$Nnode) {
 x[tree$edge[, 1] == i, 1] <- x[tree$edge[, 2] == i,
2] <- A[as.character(i), 1]
 y[tree$edge[, 1] == i, 1] <- y[tree$edge[, 2] == i,
2] <- A[as.character(i), 2]
 z[tree$edge[, 1] == i, 1] <- z[tree$edge[, 2] == i,
2] <- A[as.character(i), 3]
   }
   if (is.null(colnames(X)))
 colnames(X) <- c("x", "y", "z")
   if (method == "dynamic") {
 params <- get("r3dDefaults")
 plot3d(rbind(X, A), xlab = colnames(X)[1], ylab = colnames(X)[2],
zlab = colnames(X)[3], axes = con$axes, box = con$box,
params = params)
 spheres3d(X, radius = 0.02 * mean(apply(X, 2, max) -
 apply(X, 2, min)), col=pointcol)
 for (i in 1:nrow(tree$edge)) segments3d(x[i, ], y[i, ], z[i, ], lwd
= con$lwd, col=edgecol[i])
 ms <- colMeans(X)
 rs <- apply(rbind(X, A), 2, range)
 if (con$simple.axes) {
   lines3d(x = rs[, 1], y = c(rs[1, 2], rs[1, 2]),
   z = c(rs[1, 3], rs[1, 3]))
   lines3d(x = c(rs[1, 1], rs[1, 1]), y = rs[, 2],
   z = c(rs[1, 3], rs[1, 3]))
   lines3d(x = c(rs[1, 1], rs[1, 1]), y = c(rs[1, 2],
rs[1, 2]), z = rs[, 3])
 }
 rs <- rs[2, ] - rs[1, ]
 for (i in 1:length(tree$tip)) {
   adj <- 0.03 * rs * (2 * (X[i, ] > ms) - 1)
   if (con$ftype)
 text3d(X[i, ] + adj, texts = tree$tip.label[i],
font = con$ftype)
 }
 if (con$spin) {
   xx <- spin3d(axis = c(0, 0, 1), rpm = 10)
   play3d(xx, duration = 5)
   invisible(xx)
 }
 else invisible(NULL)
   }
   else if (method == "static") {
 if (hasArg(angle))
   angle <- list(...)$angle
 else angle <- 30
 if (hasArg(xlim))
   xlim <- list(...)$xlim
 else xlim <- NULL
 if (hasArg(ylim))
   ylim <- list(...)$ylim
 else ylim <- NULL
 if (hasArg(zlim))
   zlim <- list(...)$zlim
 else zlim = NULL
 xx <- scatterplot3d(X, xlab = colnames(X)[1], zlab = colnames(X)[3],
 pch = 19, angle = angle, ylab = colnames(X)[2],
 asp = 1, cex.symbols = 1.3, xlim = xlim, ylim =
ylim,
 zlim = zlim)
 aa <- xx$xyz.convert(A)
 points(aa$x, aa$y, pch = 19, cex = 0.8)
 for (i in 1:nrow(tree$edge)) {
   aa <- xx$xyz.convert(x[i, ], y[i, ], z[i, ])
   lines(aa$x, aa$y, lwd = 2)
 }
 for (i in 1:length(tree$tip.label)) {
   aa <- xx$xyz.convert(x[which(tree$edge[, 2] == i),
  2], y[which(tree$edge[, 2] == i), 2],
z[which(tree$edge[,

  2] == i), 2])
   text(tree$tip.label[i], x = aa$x, y = aa$y, pos = 2)
 }
 invisible(xx)
   }
}



___
R-sig-phylo mailing list - R-sig-phylo@r-project.org
https://stat.ethz.ch/mailman

Re: [R-sig-phylo] edge color in phylomorphospace3d

2014-06-10 Thread Jonas Eberle
Dear Paolo,

I modified the phylomorphospace3d code some time ago to be able to plot
colored branches (see below). You can use pointcol and edgecol to color the
plot. These can be simple color specifications (such as "black") or vectors
of colors that have the length of your number of tips or edges,
respectively.

Thank you Liam for this piece of code! It's really usefull for me! I hope I
didn't spoil your code too much :)

Jonas




ColoredPhylomorphospace3d <- function (tree, X, A = NULL, label = TRUE,
pointcol="black", edgecol="black", control = list(),
  method = c("dynamic", "static"), ...)
{
  method <- method[1]
  if (class(tree) != "phylo")
stop("tree object must be of class 'phylo.'")
  # controls festlegen
  con = list(spin = TRUE, axes = TRUE, box = TRUE, simple.axes = FALSE,
 lwd = 1, ftype = "reg")
  con[(namc <- names(control))] <- control
  if (con$simple.axes)
con$box <- con$axes <- FALSE
  con$ftype <- which(c("off", "reg", "b", "i", "bi") == con$ftype) -
1
  if (is.null(A))
A <- apply(X, 2, function(x, tree) fastAnc(tree, x),
   tree = tree)
  else A <- A[as.character(1:tree$Nnode + length(tree$tip)),
  ]
  x <- y <- z <- matrix(NA, nrow(tree$edge), 2)
  X <- X[tree$tip.label, ]
  for (i in 1:length(tree$tip)) {
x[tree$edge[, 2] == i, 2] <- X[i, 1]
y[tree$edge[, 2] == i, 2] <- X[i, 2]
z[tree$edge[, 2] == i, 2] <- X[i, 3]
  }
  for (i in length(tree$tip) + 1:tree$Nnode) {
x[tree$edge[, 1] == i, 1] <- x[tree$edge[, 2] == i,
   2] <- A[as.character(i), 1]
y[tree$edge[, 1] == i, 1] <- y[tree$edge[, 2] == i,
   2] <- A[as.character(i), 2]
z[tree$edge[, 1] == i, 1] <- z[tree$edge[, 2] == i,
   2] <- A[as.character(i), 3]
  }
  if (is.null(colnames(X)))
colnames(X) <- c("x", "y", "z")
  if (method == "dynamic") {
params <- get("r3dDefaults")
plot3d(rbind(X, A), xlab = colnames(X)[1], ylab = colnames(X)[2],
   zlab = colnames(X)[3], axes = con$axes, box = con$box,
   params = params)
spheres3d(X, radius = 0.02 * mean(apply(X, 2, max) -
apply(X, 2, min)), col=pointcol)
for (i in 1:nrow(tree$edge)) segments3d(x[i, ], y[i, ], z[i, ], lwd =
con$lwd, col=edgecol[i])
ms <- colMeans(X)
rs <- apply(rbind(X, A), 2, range)
if (con$simple.axes) {
  lines3d(x = rs[, 1], y = c(rs[1, 2], rs[1, 2]),
  z = c(rs[1, 3], rs[1, 3]))
  lines3d(x = c(rs[1, 1], rs[1, 1]), y = rs[, 2],
  z = c(rs[1, 3], rs[1, 3]))
  lines3d(x = c(rs[1, 1], rs[1, 1]), y = c(rs[1, 2],
   rs[1, 2]), z = rs[, 3])
}
rs <- rs[2, ] - rs[1, ]
for (i in 1:length(tree$tip)) {
  adj <- 0.03 * rs * (2 * (X[i, ] > ms) - 1)
  if (con$ftype)
text3d(X[i, ] + adj, texts = tree$tip.label[i],
   font = con$ftype)
}
if (con$spin) {
  xx <- spin3d(axis = c(0, 0, 1), rpm = 10)
  play3d(xx, duration = 5)
  invisible(xx)
}
else invisible(NULL)
  }
  else if (method == "static") {
if (hasArg(angle))
  angle <- list(...)$angle
else angle <- 30
if (hasArg(xlim))
  xlim <- list(...)$xlim
else xlim <- NULL
if (hasArg(ylim))
  ylim <- list(...)$ylim
else ylim <- NULL
if (hasArg(zlim))
  zlim <- list(...)$zlim
else zlim = NULL
xx <- scatterplot3d(X, xlab = colnames(X)[1], zlab = colnames(X)[3],
pch = 19, angle = angle, ylab = colnames(X)[2],
asp = 1, cex.symbols = 1.3, xlim = xlim, ylim =
ylim,
zlim = zlim)
aa <- xx$xyz.convert(A)
points(aa$x, aa$y, pch = 19, cex = 0.8)
for (i in 1:nrow(tree$edge)) {
  aa <- xx$xyz.convert(x[i, ], y[i, ], z[i, ])
  lines(aa$x, aa$y, lwd = 2)
}
for (i in 1:length(tree$tip.label)) {
  aa <- xx$xyz.convert(x[which(tree$edge[, 2] == i),
 2], y[which(tree$edge[, 2] == i), 2],
z[which(tree$edge[,

2] == i), 2])
  text(tree$tip.label[i], x = aa$x, y = aa$y, pos = 2)
}
invisible(xx)
  }
}

[[alternative HTML version deleted]]

___
R-sig-phylo mailing list - R-sig-phylo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-phylo
Searchable archive at http://www.mail-archive.com/r-sig-phylo@r-project.org/