dendrogram {mva} | R Documentation |
Class "dendrogram"
provides general functions for handling
tree-like structures. It is intended as a replacement for similar
functions in hierarchical clustering and classification/regression
trees, such that all of these can use the same engine for plotting or
cutting trees.
The code is still in testing stage and the API may change in the future.
as.dendrogram(object, ...)
## S3 method for class 'dendrogram'
plot(x, type=c("rectangle", "triangle"),
center=FALSE, edge.root= !is.null(attr(x,"edgetext")),
nodePar = NULL, edgePar = list(), xlab="", ylab="",
horiz = FALSE, ...)
## S3 method for class 'dendrogram'
cut(x, h, ...)
## S3 method for class 'dendrogram'
print(x, digits, ...)
## S3 method for class 'dendrogram'
str(x, ...)
object |
any R object that can be made into one of class
|
x |
object of class |
type |
type of plot. |
center |
logical; if |
edge.root |
logical; if true, draw an edge to the root node. |
nodePar |
a |
edgePar |
a |
horiz |
logical indicating if the dendrogram should be draw horizontally or not. |
h |
height at which the tree is cut. |
... , xlab , ylab |
graphical parameters, or arguments for other methods. |
digits |
integer specifiying the precision for printing, see
|
Warning: This documentation is preliminary.
The dendrogram is directly represented as a nested list where each
component corresponds to a branch of the tree. Hence, the first
branch of tree z
is z[[1]]
, the second branch of the
corresponding subtree is z[[1]][[2]]
etc.. Each node of the tree
carries some information needed for efficient plotting or cutting as
attributes:
members
total number of leaves in the branch
height
numeric non-negative height at which the node is plotted.
midpoint
numeric horizontal distance of the node from
the left border of the branch. This is needed at least for
plot(*, center=FALSE)
.
text
character; the label of the node
edgetext
character; the label for the edge leading to the node
nodePar
a named list of length one vectors specifying
node-specific attributes for points
plotting, see
the nodePar
argument above.
edgePar
a named list of length one vectors specifying
attributes for segments
plotting of the edge leading
to the node, see the edgePar
argument above.
leaf
logical, if TRUE
, the node is a leaf of
the tree. This will often be a character
which can
be used for plotting instead of the text
attribute.
cut.dendrogram()
returns a list with components $upper
and $lower
, the first is a truncated version of the original
tree, also of class dendrogram
, the latter a list with the
branches obtained from cutting the tree, each a dendrogram
.
There are [[
, print
, and str
methods for "dendrogram"
objects where the first one
(extraction) ensures that selecting sub-branches keeps the class.
Objects of class "hclust"
can be converted to class
"dendrogram"
using method as.dendrogram
.
isLeaf()
, plotNode()
and plotNodeLimit()
are helper
functions.
When using type = "triangle"
, center = TRUE
often looks
better.
library(mva)
data(USArrests)
hc <- hclust(dist(USArrests), "ave")
(dend1 <- as.dendrogram(hc)) # "print()" method
str(dend1) # "str()" method
op <- par(mfrow= c(2,2), mar = c(3,3,1,1))
plot(dend1)
## "triangle" type and show inner nodes:
plot(dend1, nodePar=list(pch = c(1,NA),cex=0.8), type = "t", center=TRUE)
plot(dend1, edgePar=list(col = 1:2, lty = 2:3), edge.root = TRUE)
plot(dend1, nodePar=list(pch = 2:1,cex=.4*2:1, col = 2:3), horiz = TRUE)
dend2 <- cut(dend1, h=70)
plot(dend2$upper)
## leafs are wrong horizontally:%% FIXME ?!?
plot(dend2$upper, nodePar=list(pch = c(1,7), col = 2:1))
## dend2$lower is *NOT* a dendrogram, but a list of .. :
plot(dend2$lower[[3]], nodePar=list(col=4), horiz = TRUE, type = "tr")
## "inner" and "leaf" edges in different type & color :
plot(dend2$lower[[2]], nodePar=list(col=1),# non empty list
edgePar = list(lty=1:2, col=2:1), edge.root=TRUE)
par(op)