首页 » SEO优化 » php树状图数组技巧_R措辞 基于R措辞实现树形图的绘制

php树状图数组技巧_R措辞 基于R措辞实现树形图的绘制

访客 2024-11-15 0

扫一扫用手机浏览

文章目录 [+]

之以是还用R措辞实现树形图的绘制,紧张缘故原由在于R措辞所实现的树形图比python实现的更加多样。
R措辞树形图供应以下两种类型:

分层树形图:类似CEO管理团队领导管理员工等等。
聚类树形图:聚类将一组个体按相似性分组。
它的结果可以可视化为一棵树。

本文紧张参考:Dendrogram

php树状图数组技巧_R措辞 基于R措辞实现树形图的绘制

本文所有代码见:R-Study-Notes

php树状图数组技巧_R措辞 基于R措辞实现树形图的绘制
(图片来自网络侵删)
1 分层树形图 DENDROGRAM FROM HIERARCHICAL DATA1.1 基于R措辞和ggraph绘制树形图 Introduction to tree diagram with R and ggraph

本节逐步先容通过R措辞和ggraph建立树形图,并供应理解释和可复制代码。
ggraph包是用R从层次数据构建树形图的最佳选择,其遵照与ggplot2相同的逻辑。
本节旨在利用ggraph库制作一个表示层次数据的基本树形图。
考虑两种输入格式:

基于边列表基于嵌套数据1.1.1 通过边绘制树形图 Dendrogram from edge list

基于边列表绘制树形图意思是给定每一个节点到其余一个节点的数据,来依次绘制树形图。
边列表数据利用ggraph最方便的格式。
数据构造如下图所示。
每一行代表一条边,比如(origin,group1)表示从节点origin到group的边。

添加图片注释,不超过 140 字(可选)

请遵照以下步骤:

利用igraph库中的graph_from_data_frame()函数将输入数据帧转换为图形工具利用ggraph的树形图布局,布局为'dendrogram'

紧张步骤依次讲解:

创建数据个中d1为根节点到第一层节点的数据,每一行代表一条边,比如(origin,group1)表示从节点origin到group的边,d2是第一层节点到第二层节点的数据。
edges是对d1和d2的汇总

# libraries# 包library(ggraph)library(igraph)library(tidyverse) # create an edge list data frame giving the hierarchical structure of your individuals# 创建层级数据d1 <- data.frame(from="origin", to=paste("group", seq(1,3), sep=""))d1d2 <- data.frame(from=rep(d1$to, each=3), to=paste("subgroup", seq(1,9), sep="_"))d2# 汇总edges <- rbind(d1, d2)edges

创建图形构造

须要创建专用的图形构造,origin->group1表示从节点origin到节点group1

# Create a graph object mygraph <- graph_from_data_frame( edges )mygraph

IGRAPH 2c80675 DN-- 13 12 -- + attr: name (v/c) + edges from 2c80675 (vertex names): [1] origin->group1 origin->group2 origin->group3 group1->subgroup_1 [5] group1->subgroup_2 group1->subgroup_3 group2->subgroup_4 group2->subgroup_5 [9] group2->subgroup_6 group3->subgroup_7 group3->subgroup_8 group3->subgroup_9

绘图

# Basic tree# 根本树形图# layout表示布局办法,circular表示是否为环状树形图ggraph(mygraph, layout = 'dendrogram', circular = FALSE) + # 画边 geom_edge_diagonal() + # 画节点 geom_node_point() + # 设置主题 theme_void()

添加图片注释,不超过 140 字(可选)

png

1.1.2 通过嵌套数据绘制树形图 Dendrogram from a nested dataframe

另一种常见格式是嵌套数据。
下面的代码演示如何轻松地将数组转换为嵌套数据。
嵌套数据构造如下图所示,嵌套数据每一列代表一个节点,行代表节点到节点的路径

添加图片注释,不超过 140 字(可选)

建立数据

# librarieslibrary(ggraph)library(igraph)library(tidyverse) # create a data frame data <- data.frame( level1="CEO", level2=c( rep("boss1",4), rep("boss2",4)), level3=paste0("mister_", letters[1:8]))data

将数据转换为边列表

# transform it to a edge list!edges_level1_2 <- data %>% select(level1, level2) %>% unique %>% rename(from=level1, to=level2)edges_level2_3 <- data %>% select(level2, level3) %>% unique %>% rename(from=level2, to=level3)edges_level1_2edges_level2_3edge_list=rbind(edges_level1_2, edges_level2_3)edge_list

绘图

# Now we can plot thatmygraph<- graph_from_data_frame( edge_list )ggraph(mygraph, layout = 'dendrogram', circular = FALSE) + geom_edge_diagonal() + geom_node_point() + theme_void()

添加图片注释,不超过 140 字(可选)

png

1.2 利用R和ggraph自定义树形图 Dendrogram customization with R and ggraph

本节旨在显示了如何自定义树形图:布局,边线样式,节点特色等

1.2.1 数据准备 Data preparation

这里准备的是本节所用到的通用数据

首先利用igraph包创建一个数据集和一个图形工具

# Librarieslibrary(ggraph)library(igraph)library(tidyverse)theme_set(theme_void()) # data: edge list# 边数据d1 <- data.frame(from="origin", to=paste("group", seq(1,7), sep=""))d2 <- data.frame(from=rep(d1$to, each=7), to=paste("subgroup", seq(1,49), sep="_"))edges <- rbind(d1, d2)

Warning message: "New theme missing the following elements: axis.title.x, axis.title.x.top, axis.title.y, axis.title.y.right, axis.text.x, axis.text.x.top, axis.text.y, axis.text.y.right, axis.ticks, axis.line, axis.line.x, axis.line.y, legend.background, legend.margin, legend.spacing, legend.spacing.x, legend.spacing.y, legend.key, legend.key.height, legend.key.width, legend.text.align, legend.title.align, legend.direction, legend.justification, legend.box.margin, legend.box.background, legend.box.spacing, panel.background, panel.border, panel.spacing.x, panel.spacing.y, panel.grid, panel.grid.minor, plot.background, strip.background, strip.placement, strip.text.x, strip.text.y"

为每个节点添加聚类信息和值信息

# We can add a second data frame with information for each node!# 为每个节点设置信息name <- unique(c(as.character(edges$from), as.character(edges$to)))# 设置每个节点对应的聚类信息和值vertices <- data.frame( name=name, group=c( rep(NA,8) , rep( paste("group", seq(1,7), sep=""), each=7)), cluster=sample(letters[1:4], length(name), replace=T), value=sample(seq(10,30), length(name), replace=T))vertices[0:10,]# Create a graph objectmygraph <- graph_from_data_frame( edges, vertices=vertices)1.2.2 环形或线形布局 Circular or linear layout

首先,由于ggraph的layout参数,您可以利用circular选项来利用环形或线形布局。

# 线形布局ggraph(mygraph, layout = 'dendrogram', circular = FALSE) + geom_edge_diagonal() # 环形布局ggraph(mygraph, layout = 'dendrogram', circular = TRUE) + geom_edge_diagonal()

添加图片注释,不超过 140 字(可选)

png

添加图片注释,不超过 140 字(可选)

png

1.2.3 边的样式 Edge style

然后你可以选择不同的边样式。
ggraph软件包有两个紧张功能:geom_edge_link和geom_edge_diagram。

# 折线ggraph(mygraph, layout = 'dendrogram') + geom_edge_link()# 弧线ggraph(mygraph, layout = 'dendrogram') + geom_edge_diagonal()

添加图片注释,不超过 140 字(可选)

png

添加图片注释,不超过 140 字(可选)

png

1.2.4 标签和节点 Labels and Nodes

您可能须要添加标签,以便对树有更深入的理解。
末了是节点。
这可以分别利用geom_node_text和geom_node_point来完成。
但是对付环形树添加标签比较麻烦,下一节单独进行讲述。

ggraph(mygraph, layout = 'dendrogram') + # 设置边 geom_edge_diagonal() + # 设置节点名,label表示节点名,filter=leaf表示跳过叶子节点,angle标签方向,hjust和nudge_y标签和节点间隔 geom_node_text(aes( label=name, filter=leaf) , angle=90 , hjust=1, nudge_y = -0.01) + # 设置y轴范围 ylim(-.4, NA)ggraph(mygraph, layout = 'dendrogram') + geom_edge_diagonal() + geom_node_text(aes( label=name, filter=leaf) , angle=90 , hjust=1, nudge_y = -0.04) + # 为每个节点添加点 geom_node_point(aes(filter=leaf) , alpha=0.6) + ylim(-.5, NA)

添加图片注释,不超过 140 字(可选)

png

添加图片注释,不超过 140 字(可选)

png

1.2.5 自定义美学 Customize aesthetics

在树形图中添加颜色或形状是一项常见的任务。
它可以更清楚地显示数据集的组织构造。
ggraph的事情事理与ggplot2相同。
在每个组件的美学部分,可以利用初始数据帧的一列映射到形状、颜色、大小或其他。

ggraph(mygraph, layout = 'dendrogram') + geom_edge_diagonal() + geom_node_text(aes( label=name, filter=leaf, color=group) , angle=90 , hjust=1, nudge_y=-0.1) + geom_node_point(aes(filter=leaf, size=value, color=group) , alpha=0.6) + ylim(-.6, NA) + theme(legend.position="none")

添加图片注释,不超过 140 字(可选)

png

1.3 基于R和ggraph自定义环形树形图

本节先容通过R和ggraph自定义环形树形图。
ggraph库的圆形树形图应有其专用页面,由于调度标签可能有些棘手。
实际上,它们须要具有良好的角度,可以在图表的左侧高下翻转,并且还须要调度其对齐办法。
以下分布先容:

创建数据

# Librarieslibrary(ggraph)library(igraph)library(tidyverse)library(RColorBrewer) # 创建数据,类似前面的步骤# create a data frame giving the hierarchical structure of your individualsd1=data.frame(from="origin", to=paste("group", seq(1,5), sep=""))d2=data.frame(from=rep(d1$to, each=5), to=paste("subgroup", seq(1,25), sep="_"))edges=rbind(d1, d2)

# create a vertices data.frame. One line per object of our hierarchy # 为每个节点添加值 vertices = data.frame( name = unique(c(as.character(edges$from), as.character(edges$to))), # 正态分布随机取值,共得到31个值。
如果是其他数据,去掉value = runif(31),查看运行后的dim(vertices)就知道该填多少了 value = runif(31) ) # Let's add a column with the group of each name. It will be useful later to color points # 为每个节点添加分组信息 vertices$group = edges$from[ match( vertices$name, edges$to ) ] dim(vertices) head(vertices)

313

添加绘图信息

# Let's add information concerning the label we are going to add: angle, horizontal adjustement and potential flip calculate the ANGLE of the labels# 让我们添加有关我们将要添加的标签的信息:角度、水平调度和翻转,打算标签的角度# 添加id值vertices$id=NAmyleaves=which(is.na( match(vertices$name, edges$from) ))nleaves=length(myleaves)vertices$id[ myleaves ] = seq(1:nleaves)# 添加角度vertices$angle= -360 vertices$id / nleavesvertices

# calculate the alignment of labels: right or left # 判断标签是倾向左边还是右边 # hjust表示是否水平翻转 vertices$hjust<-ifelse(vertices$angle < -90 & vertices$angle > -270, 1, 0) # flip angle BY to make them readable # 是否翻转标签 vertices$angle<-ifelse(vertices$angle < -90 & vertices$angle > -270, vertices$angle+180, vertices$angle) vertices[12:20,] # Create a graph object # 创建图 mygraph <- graph_from_data_frame( edges, vertices=vertices )

vertices

# Make the plotp<-ggraph(mygraph, layout = 'dendrogram', circular = TRUE) + # 设置边 geom_edge_diagonal(colour="grey") + # 设置边的颜色 scale_edge_colour_distiller(palette = "RdPu") + # 设置点的标签 geom_node_text(aes(x = x1.15, y=y1.15, filter = leaf, label=name, angle = angle, hjust=hjust, colour=group), size=2.7, alpha=1) + # 设置点的形状 geom_node_point(aes(filter = leaf, x = x1.07, y=y1.07, colour=group, size=value, alpha=0.2)) + # 掌握颜色 scale_colour_manual(values= rep( brewer.pal(9,"Paired") , 30)) + scale_size_continuous( range = c(0.1,10) ) + theme_void() + theme( # 不显示图例 legend.position="none", plot.margin=unit(c(0,0,0,0),"cm"), ) + expand_limits(x = c(-1.3, 1.3), y = c(-1.3, 1.3))p# 保存数据 Save at pngggsave(p, file="output.png", width=10, height=10,dpi=300)

添加图片注释,不超过 140 字(可选)

png

其余对付标签角度的设置多说几句,不同的平台标签角度设置不一样。
标签的角度设置紧张有以下三行代码:

# 添加角度vertices$angle= -360 vertices$id / nleaves# hjust表示是否水平翻转vertices$hjust<-ifelse(vertices$angle < -90 & vertices$angle > -270, 1, 0)# 是否翻转标签vertices$angle<-ifelse(vertices$angle < -90 & vertices$angle > -270, vertices$angle+180, vertices$angle)

第一行代码指的是给每个标签授予一个角度值,常日设置这一行,其他两行不设置,或者跳过,图形基本上就会完成。
只不过在环形左半边标签是翻转的,便是字朝下。
如果要字朝上就设置先水平反正左边的标签,然后180度旋转左边的标签,右边标签不变就行了。

比如通过第一行我们得到的角度值,subgroup_7到subgroup_18处于左半边,角度实在范围为-90到-270度,以是通过第二行和第三行代码只要设置-90度到-270度的点,水平翻转然后翻转标签就行了。

2 聚类结果的树形图 DENDROGRAM FROM CLUSTERING RESULT.

层次聚类是数据科学中的一项常见任务,可以利用R中的hclust()函数来实行。
下面的示例将辅导您完玉成部过程,演示如何准备数据、如何运行聚类以及如何构建适当的图表以可视化其结果。

2.1 用R进行聚类的最基本树形图 Most basic dendrogram for clustering with R

聚类许可通过相似性将样本分组,并且其结果可以可视化为树形图。
这篇文章描述了该hclust()函数的基本用法,并根据其输出构建树形图。
对付层次聚类树形图有以下极大要素:

输入数据集是一个矩阵,个中每一行是一个样本,每一列是一个变量。
可以利用t()函数转置矩阵。
聚类是在供应样本之间间隔的正方形矩阵(sample x sample)上实行的,间隔矩阵可以利用dist()或cor()函数打算,详细取决于您提出的问题hclust()函数用于实行分层聚类它的输出可以用plot()函数直接可视化。
请参阅可能的自定义。

首先产生数据集

# Dataset data <- matrix( sample(seq(1,2000),200), ncol = 10 )rownames(data) <- paste0("sample_" , seq(1,20))colnames(data) <- paste0("variable",seq(1,10))datadim(data)2010

# Euclidean distance# 打算欧式间隔dist <- dist(data[ , c(4:8)] , diag=TRUE)# Hierarchical Clustering with hclust# 分层聚类hc <- hclust(dist)# Plot the resultplot(hc)

添加图片注释,不超过 140 字(可选)

png

对付层次聚类紧张有以下几个原则:

基于目标之间的间隔。
探求两个目标之间的最小间隔。
将两个目标工具聚合在一个簇中。
用目标群的中央进行打算。
直到只有一个簇包含每个点。
2.2 放大分支 Zoom on a group

我们可以放大树的特定部分。
利用[[ ]]运算符选择感兴趣的枝条。
例如:

# 将上面的树形图存入dhcdhc <- as.dendrogram(hc)dhc[[1]] 表示从上到下第一层,个中从左往右第一个枝条dhc[[2]][[2]] 表示从上到下第二层,个中从左往右第二个枝条

下面代码,所示展示2.1节所画层次树第一层右边部分分支

# store the dedrogram in an object# 保存聚类结果为dhc变量dhc <- as.dendrogram(hc)# set the marginpar(mar=c(4,4,2,2))# 打印会见告你分支情形print(dhc[[2]])# Plot the Second group# 绘图plot(dhc[[2]] , main= "zoom on a part of the dendrogram")

'dendrogram' with 2 branches and 14 members total, at height 2795.492

添加图片注释,不超过 140 字(可选)

png

下面代码,所示展示2.1节所画层次树第一层右边部分的第二个分支

# store the dedrogram in an objectdhc <- as.dendrogram(hc)# set the marginpar(mar=c(4,4,2,2))print(dhc[[2]][[1]])# Plot the Second groupplot(dhc[[2]][[1]] , main= "zoom on a part of the dendrogram")

'dendrogram' with 2 branches and 9 members total, at height 2107.407

添加图片注释,不超过 140 字(可选)

png

2.3 绘制带颜色和图例的树形图 Dendrogram with color and legend in R

本节紧张讲述基本树状图的自定义。
展示了如何为叶子和样本名称添加特定的颜色。
它许可检讨在聚类之后是否确实找到了预期的类。

首先天生数据

# Build dataset (just copy and paste, this is NOT interesting)# 天生数据,可以跳过sample <- paste(rep("sample_",24) , seq(1,24) , sep="")specie <- c(rep("dicoccoides" , 8) , rep("dicoccum" , 8) , rep("durum" , 8))treatment <- rep(c(rep("High",4 ) , rep("Low",4)),3)data <- data.frame(sample,specie,treatment)for (i in seq(1:5)){ gene=sample(c(1:40) , 24 ) data=cbind(data , gene) colnames(data)[ncol(data)]=paste("gene_",i,sep="") }data[data$treatment=="High" , c(4:8)]=data[data$treatment=="High" , c(4:8)]+100data[data$specie=="durum" , c(4:8)]=data[data$specie=="durum" , c(4:8)]-30rownames(data) <- data[,1] head(data)

然后聚类

# Compute Euclidean distance between samplesdist=dist(data[ , c(4:8)] , diag=TRUE)# Perfor clustering with hclust# 聚类并保存结果hc <- hclust(dist)dhc <- as.dendrogram(hc)dhc

'dendrogram' with 2 branches and 24 members total, at height 328.8632

对付每个节点都有自己的属性

# Actually, each leaf of the tree has several attributes, like the color, the shape.. Have a look to it: # 选择特殊的节点specific_leaf <- dhc[[1]][[1]][[1]]specific_leafattributes(specific_leaf)

'dendrogram' with 2 branches and 2 members total, at height 23.81176

$members2$midpoint0.5$height23.8117617995813$class'dendrogram'

创建改变叶子节点属性函数

如果想给树的每片叶子上色,必须改变每片叶子的属性。
这可以利用dendrapply函数来完成。
因此,创建了一个函数,向叶子节点添加属性。
如果运用自己的数据,改变treatment和specie的值就行了。

i=0colLab<-function(n){ # 判断是否为节点 if(is.leaf(n)) { # 得到节点的属性 a=attributes(n) # I deduce the line in the original data, and so the treatment and the specie. # 得到该点的信息 ligne=match(attributes(n)$label,data[,1]) # 根据自己的结果设置 treatment=data[ligne,3]; if(treatment=="Low"){col_treatment="blue"};if(treatment=="High"){col_treatment="red"} # 根据种类设置颜色,根据自己的结果设置 specie=data[ligne,2]; if(specie=="dicoccoides"){col_specie="red"};if(specie=="dicoccum"){col_specie="Darkgreen"};if(specie=="durum"){col_specie="blue"} # M odification of leaf attribute # 修正节点的属性 attr(n,"nodePar")<-c(a$nodePar,list(cex=1.5,lab.cex=1,pch=20,col=col_treatment,lab.col=col_specie,lab.font=1,lab.cex=1)) } return(n)}

绘图

# 运用函数dL <- dendrapply(dhc, colLab) # And the plotplot(dL , main="structure of the population")# 图例legend("topright", # 笔墨 legend = c("High Nitrogen" , "Low Nitrogen" , "Durum" , "Dicoccoides" , "Dicoccum"), # 颜色 col = c("red", "blue" , "blue" , "red" , "Darkgreen"), pch = c(20,20,4,4,4), bty = "n", pt.cex = 1.5, cex = 0.8 , text.col = "black", horiz = FALSE, inset = c(0, 0.1))

添加图片注释,不超过 140 字(可选)

png

3 利用DENDEXTEND绘制树形图 MORE CUSTOMIZATION WITH DENDEXTEND

dendextend紧张是自定义层次聚类图,对第二节的补充。
dendextend包许可在树状图定制方面更进一步。
这里有一组例子展示了紧张的可能性,比如在底部添加颜色条,面对面绘制2棵树等等。

3.1 根本树形图绘制 Basic dendrogram

DENDEXTEND首先须要绘制如下最基本的树形图,然后进行相应变动

# Librarylibrary(tidyverse) # Datahead(mtcars) # Clusterisation using 3 variables# 聚类,利用管道mtcars %>% select(mpg, cyl, disp) %>% dist() %>% hclust() %>% as.dendrogram() -> dend # Plot# 绘图par(mar=c(7,3,1,1)) # Increase bottom margin to have the complete labelplot(dend)

添加图片注释,不超过 140 字(可选)

png

3.2 set函数 The set() function

dendextend的set()函数许可修正树的特定部分的属性。
例如,您可以为分支和标签自定义cex、lwd、col、lty。
也可以自定义节点或叶。
下面的代码解释了这一观点:

自定义树枝和标签

# librarylibrary(dendextend)# 绘图dend是设置函数dend %>% # Custom branches # 自定义树枝的颜色 set("branches_col", "red") %>% # 自定义树枝宽度 set("branches_lwd", 3) %>% # Custom labels # 自定义标签颜色 set("labels_col", "blue") %>% # 自定义标具名体大小 set("labels_cex", 0.8) %>% plot()

添加图片注释,不超过 140 字(可选)

png

自定义树枝节点

dend %>% # 自定义树枝节点形状 set("nodes_pch", 20) %>% # 自定义树枝节点大小 set("nodes_cex", 1.5) %>% # 自定义树枝节点颜色 set("nodes_col", "red") %>% plot()

添加图片注释,不超过 140 字(可选)

png

自定义叶子

dend %>% # 末了一层节点形状 set("leaves_pch", 22) %>% # 末了一层节点宽度 set("leaves_cex", 1) %>% # 末了一层节点颜色 set("leaves_col", "red") %>% plot()

添加图片注释,不超过 140 字(可选)

png

3.3 聚类结果突出 Highlight clusters

dendextend库有一些很好的功能来突出树簇。
可以根据分支的簇属性为分支和标签上色,指定所需的簇数。
这个 rect.dendrogram()函数乃至许可用矩形突出显示一个或多个特定的簇。

基于颜色突出聚类结果

par(mar=c(1,1,1,7))dend %>% # 根据第一层分支结果自定义标签颜色 set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>% # 根据第一层分支结果自定义分支颜色 set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3) %>% # horize是否水平放置,axes是否显示阁下的间隔尺 plot(horiz=TRUE, axes=FALSE)# 画线条,v高度,lty线条类型abline(v = 350, lty = 2)

添加图片注释,不超过 140 字(可选)

png

基于矩形框突出聚类结果

# 利用par(mar=c(9,1,1,1))dend %>% set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>% set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3) %>% plot(axes=FALSE)# 画矩形框# k表示将类切割为k个簇,lty矩形框线条类型,lwd矩形框线条宽度,col添补颜色,x表示从第几个类开始画簇rect.dendrogram( dend, k=3, lty = 2, lwd = 5, x=17, col=rgb(0.1, 0.2, 0.4, 0.1) )

添加图片注释,不超过 140 字(可选)

png

3.4 与预期的聚类结果比较较 Comparing with an expected clustering

将得到的集群与预期的分布进行比较是一项常见的任务。
在我们用来构建树状图的mtcars数据集中,有一个am列是一个二进制变量。
如果我们可以用cluster()函数来检讨与这个变量是否同等。

# Create a vector of colors, darkgreen if am is 0, green if 1.# 得到数据,如果am为0便是forestgreen颜色my_colors <- ifelse(mtcars$am==0, "forestgreen", "green") # Make the dendrogram# 设置图像空缺区域par(mar=c(10,1,1,1))dend %>% set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>% set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3) %>% set("leaves_pch", 19) %>% set("nodes_cex", 0.7) %>% plot(axes=FALSE,horiz =FALSE) # Add the colored bar# 添加颜色bar# colors颜色,dend聚类图,rowLabels名字colored_bars(colors = my_colors, dend = dend, rowLabels = "am",horiz =FALSE)

添加图片注释,不超过 140 字(可选)

png

3.5 基于tanglegram()比较2个树状图 Comparing 2 dendrograms with tanglegram()

可以利用tanglegram()函数比较两个树状图。
这里它解释了一个非常主要的观点:当你打算你的间隔矩阵和当你运行你的层次聚类算法时,你不能大略地利用默认选项而不考虑你在做什么。
看看两种不同的集群化方法之间的差异吧。

# Make 2 dendrograms, using 2 different clustering methods# 利用两种完备不同的聚类方法d1 <- USArrests %>% dist() %>% hclust( method="average" ) %>% as.dendrogram()d2 <- USArrests %>% dist() %>% hclust( method="complete" ) %>% as.dendrogram() # Custom these kendo, and place them in a list# 定制树列表dl <- dendlist( d1 %>% set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>% set("branches_lty", 1) %>% set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3), d2 %>% set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>% set("branches_lty", 1) %>% set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3)) # Plot them togethertanglegram(dl, # 子树是否带颜色 common_subtrees_color_lines = FALSE, # 是否突出显示边 highlight_distinct_edges = TRUE, # 是否突出分支 highlight_branches_lwd=FALSE, # 两个树的间隔 margin_inner=7, # 两个树之间线条宽度 lwd=2)

添加图片注释,不超过 140 字(可选)

png

4 参考Dendrogram基于matplotlib实现树形图的绘制

参考资料

[1]

基于matplotlib实现树形图的绘制: https://blog.csdn.net/luohenyj/article/details/97949476

[2]

Dendrogram: https://www.r-graph-gallery.com/dendrogram.html

[3]

R-Study-Notes: https://github.com/luohenyueji/R-Study-Notes/tree/master/Visualization

[4]

Dendrogram: https://www.r-graph-gallery.com/dendrogram.html

[5]

基于matplotlib实现树形图的绘制: https://blog.csdn.net/luohenyj/article/details/97949476

标签:

相关文章