dendrogram
位于 stats
包(package)。 说明
类"dendrogram"
提供处理tree-like 结构的通用函数。它旨在替代分层聚类和分类/回归树中的类似函数,以便所有这些都可以使用相同的引擎来绘制或切割树。
用法
as.dendrogram(object, ...)
## S3 method for class 'hclust'
as.dendrogram(object, hang = -1, check = TRUE, ...)
## S3 method for class 'dendrogram'
as.hclust(x, ...)
## S3 method for class 'dendrogram'
plot(x, type = c("rectangle", "triangle"),
center = FALSE,
edge.root = is.leaf(x) || !is.null(attr(x,"edgetext")),
nodePar = NULL, edgePar = list(),
leaflab = c("perpendicular", "textlike", "none"),
dLeaf = NULL, xlab = "", ylab = "", xaxt = "n", yaxt = "s",
horiz = FALSE, frame.plot = FALSE, xlim, ylim, ...)
## S3 method for class 'dendrogram'
cut(x, h, ...)
## S3 method for class 'dendrogram'
merge(x, y, ..., height,
adjust = c("auto", "add.max", "none"))
## S3 method for class 'dendrogram'
nobs(object, ...)
## S3 method for class 'dendrogram'
print(x, digits, ...)
## S3 method for class 'dendrogram'
rev(x)
## S3 method for class 'dendrogram'
str(object, max.level = NA, digits.d = 3,
give.attr = FALSE, wid = getOption("width"),
nest.lev = 0, indent.str = "",
last.str = getOption("str.dendrogram.last"), stem = "--",
...)
is.leaf(object)
参数
object |
任何R可以成为类之一的对象 |
x, y |
类 |
hang |
数字标量,指示如何根据其父母的高度计算叶子的高度;请参阅 |
check |
逻辑指示是否应检查 |
type |
情节类型。 |
center |
逻辑性;如果 |
edge.root |
逻辑性;如果为 true,则绘制一条到根节点的边。 |
nodePar |
用于节点的 |
edgePar |
用于边 |
leaflab |
指定叶子如何标记的字符串。默认 |
dLeaf |
一个数字,指定用户坐标中叶尖与其标签之间的距离。如果默认为 |
horiz |
逻辑指示是否应水平绘制树状图。 |
frame.plot |
逻辑指示是否应在图周围绘制一个框,请参阅 |
h |
树被砍伐的高度。 |
height |
两个树状图应合并的高度。如果未指定(或 |
adjust |
确定是否应调整叶值的字符串。默认值 |
xlim, ylim |
绘图的可选 x- 和 y-limits 传递给 |
..., xlab, ylab, xaxt, yaxt |
图形参数或其他方法的参数。 |
digits |
指定打印精度的整数,请参阅 |
max.level, digits.d, give.attr, wid, nest.lev, indent.str |
|
last.str, stem |
用于 |
细节
树状图直接表示为嵌套列表,其中每个组件对应于树的一个分支。因此,树 z
的第一个分支是 z[[1]]
,相应子树的第二个分支是 z[[1]][[2]]
,或更短的 z[[c(1,2)]]
等。树的每个节点都携带有效绘图或切割所需的一些信息作为属性,其中只有叶子的 members
、 height
和 leaf
是必填的:
members
-
树枝上的叶子总数
height
-
绘制节点的数字非负高度。
midpoint
-
节点距分支左边界(最左边的叶子)的数字水平距离(所有叶子之间的单位 1)。这用于
plot(*, center = FALSE)
。 label
-
特点;节点的标签
x.member
-
对于
cut()$upper
,前成员的数量;更一般地,替代用于 ‘horizontal’ 的members
组件(当horiz = FALSE
时,否则 ‘vertical’)对齐。 edgetext
-
特点;通向节点的边的标签
nodePar
-
指定
points
绘图的 node-specific 属性的命名列表(长度为 1 的组件),请参阅上面的nodePar
参数。 edgePar
-
一个命名列表(长度为 1 的组件),指定
segments
绘制通向节点的边的属性,以及绘制edgetext
(如果可用),请参阅上面的edgePar
参数。 leaf
-
逻辑上,如果
TRUE
,则该节点是树的叶子。
cut.dendrogram()
返回一个包含组件 $upper
和 $lower
的列表,第一个是原始树的截断版本,也是类 dendrogram
,后者是一个列表,其中包含通过切割树获得的分支,每个分支都是 dendrogram
。
"dendrogram"
对象有 [[
、 print
和 str
方法,其中第一个方法(提取)确保选择 sub-branches 保留类,即返回树状图,即使只是叶子。另一方面,[
(单括号)提取返回底层列表结构。
类 "hclust"
的对象可以使用方法 as.dendrogram()
转换为类 "dendrogram"
,并且从 R 2.13.0 开始,还有一个 as.hclust()
方法作为逆方法。
rev.dendrogram
仅返回具有反转节点的树状图 x
,另请参阅 reorder.dendrogram
。
merge(x, y, ...)
方法将两个或多个树状图合并成一个新的树状图,其中x
和y
(以及可选的进一步参数)作为分支。请注意,之前R3.1.2、adjust = "none"
被隐式使用,当树状图来自时,这是无效的as.dendrogram(hclust(..))
.
nobs(object)
返回叶子总数(members
属性,见上文)。
is.leaf(object)
返回逻辑,指示 object
是否是叶子(最简单的树状图)。
plotNode()
和 plotNodeLimit()
是辅助函数。
警告
树形图上的某些操作(例如merge()
)利用了递归。对于深树,可能需要增加 options("expressions")
:如果这样做,您可能需要尽可能将 C 堆栈大小 (Cstack_info()[["size"]]
) 设置为大于默认值。
注意
plot()
:-
使用
type = "triangle"
时,center = TRUE
通常看起来更好。 str(d)
:-
如果您确实想查看内部结构,请改用
str(unclass(d))
。
例子
require(graphics); require(utils)
hc <- hclust(dist(USArrests), "ave")
(dend1 <- as.dendrogram(hc)) # "print()" method
str(dend1) # "str()" method
str(dend1, max.level = 2, last.str = "'") # only the first two sub-levels
oo <- options(str.dendrogram.last = "\\") # yet another possibility
str(dend1, max.level = 2) # only the first two sub-levels
options(oo) # .. resetting them
op <- par(mfrow = c(2,2), mar = c(5,2,1,4))
plot(dend1)
## "triangle" type and show inner nodes:
plot(dend1, nodePar = list(pch = c(1,NA), cex = 0.8, lab.cex = 0.8),
type = "t", center = TRUE)
plot(dend1, edgePar = list(col = 1:2, lty = 2:3),
dLeaf = 1, edge.root = TRUE)
plot(dend1, nodePar = list(pch = 2:1, cex = .4*2:1, col = 2:3),
horiz = TRUE)
## simple test for as.hclust() as the inverse of as.dendrogram():
stopifnot(identical(as.hclust(dend1)[1:4], hc[1:4]))
dend2 <- cut(dend1, h = 70)
## leaves are wrong horizontally in R 4.0 and earlier:
plot(dend2$upper)
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)
d3 <- dend2$lower[[2]][[2]][[1]]
stopifnot(identical(d3, dend2$lower[[2]][[c(2,1)]]))
str(d3, last.str = "'")
## to peek at the inner structure "if you must", use '[..]' indexing :
str(d3[2][[1]]) ## or the full
str(d3[])
## merge() to join dendrograms:
(d13 <- merge(dend2$lower[[1]], dend2$lower[[3]]))
## merge() all parts back (using default 'height' instead of original one):
den.1 <- Reduce(merge, dend2$lower)
## or merge() all four parts at same height --> 4 branches (!)
d. <- merge(dend2$lower[[1]], dend2$lower[[2]], dend2$lower[[3]],
dend2$lower[[4]])
## (with a warning) or the same using do.call :
stopifnot(identical(d., do.call(merge, dend2$lower)))
plot(d., main = "merge(d1, d2, d3, d4) |-> dendrogram with a 4-split")
## "Zoom" in to the first dendrogram :
plot(dend1, xlim = c(1,20), ylim = c(1,50))
nP <- list(col = 3:2, cex = c(2.0, 0.75), pch = 21:22,
bg = c("light blue", "pink"),
lab.cex = 0.75, lab.col = "tomato")
plot(d3, nodePar= nP, edgePar = list(col = "gray", lwd = 2), horiz = TRUE)
addE <- function(n) {
if(!is.leaf(n)) {
attr(n, "edgePar") <- list(p.col = "plum")
attr(n, "edgetext") <- paste(attr(n,"members"),"members")
}
n
}
d3e <- dendrapply(d3, addE)
plot(d3e, nodePar = nP)
plot(d3e, nodePar = nP, leaflab = "textlike")
也可以看看
dendrapply
用于将函数应用于每个节点。 order.dendrogram
和reorder.dendrogram
;进一步,labels
方法。
相关用法
- R dendrapply 将函数应用于树状图的所有节点
- R density 核密度估计
- R deriv 简单表达式的符号和算法导数
- R decompose 移动平均线的经典季节性分解
- R deviance 模型偏差
- R delete.response 修改术语对象
- R df.residual 剩余自由度
- R dummy.coef 提取原始编码中的系数
- R dist 距离矩阵计算
- R diffinv 离散积分:差分的逆
- R stlmethods STL 对象的方法
- R medpolish 矩阵的中值波兰(稳健双向分解)
- R naprint 调整缺失值
- R summary.nls 总结非线性最小二乘模型拟合
- R summary.manova 多元方差分析的汇总方法
- R formula 模型公式
- R nls.control 控制 nls 中的迭代
- R aggregate 计算数据子集的汇总统计
- R kruskal.test Kruskal-Wallis 秩和检验
- R quade.test 四方测试
- R plot.stepfun 绘制阶跃函数
- R alias 查找模型中的别名(依赖项)
- R qqnorm 分位数-分位数图
- R eff.aovlist 多层方差分析的计算效率
- R pairwise.t.test 成对 t 检验
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 General Tree Structures。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。