R语言 用R和ggraph绘制树状图
在这篇文章中,我们将看到如何定制树状图。它也被称为树状图,它是项目之间层次关系的一种可视化表示。树状图的主要目的是找出将对象分配到聚类的最佳方法。
创建基本树状图
为了创建一个树状图,我们将使用igraph软件包,该软件包用于创建和操作图形以及分析网络图。因此,为了创建一个树状图,我们将创建一个数据框架,使之成为分层数据结构,然后将其转化为一个边缘列表。为了绘制一个树枝图,我们将使用以下语法。
ggraph(dataset, layout)
参数
- Dataframe: 分层数据集/向量
- layout: 布局的尺寸
- Circular: 真/假
在R工作控制台安装和导入igraph包的语法
install.package(‘igraph’)
library(igraph)
有一些可选的函数来创建边缘对角线,我们将使用 geom_edge_diagonal() 方法,并将节点添加到图形中,我们将使用 geom_node_point() 方法。
# libraries
library(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])
)
# 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)
edge_list=rbind(edges_level1_2, edges_level2_3)
# Now we can plot that
graph_Data <- graph_from_data_frame( edge_list )
ggraph(graph_Data, layout = 'dendrogram', circular = FALSE) +
geom_edge_diagonal() +
geom_node_point() +
theme_void()
输出
圆形布局树状图
为了创建一个圆形布局,我们将使用circular = True,这将把它绘制成圆形布局。
# libraries
library(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])
)
# 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)
edge_list=rbind(edges_level1_2, edges_level2_3)
# plot
graph_Data <- graph_from_data_frame( edge_list )
ggraph(graph_Data, layout = 'dendrogram', circular = TRUE) +
geom_edge_diagonal()+
geom_edge_diagonal() +
geom_node_point() +
theme_void()
输出
边缘风格的树状图
为了制作直边树状图,我们将使用 geom_edge_diagonal() 方法。
# libraries
library(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])
)
# 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)
edge_list=rbind(edges_level1_2, edges_level2_3)
# Now we can plot that
graph_Data <- graph_from_data_frame( edge_list )
ggraph(graph_Data, layout = 'dendrogram') +
geom_edge_link()+
geom_node_point() +
theme_void()
输出
树状图中的标签
为了将标签添加到树状图中,我们将使用geom_node_text(),它将把标签添加到图中的分层结构中。
# libraries
library(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])
)
# 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)
edge_list=rbind(edges_level1_2, edges_level2_3)
# Now we can plot that
graph_Data <- graph_from_data_frame( edge_list )
ggraph(graph_Data, layout = 'dendrogram') +
geom_edge_diagonal() +
geom_node_text(aes( label=name)) +
theme_void()
输出
自定义树状图中的标签
为了在树状图中自定义标签,我们使用geom_node_text(),它将把标签和颜色一起添加到图中的分层结构中。
# libraries
library(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])
)
# 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)
edge_list=rbind(edges_level1_2, edges_level2_3)
# Now we can plot that
graph_Data <- graph_from_data_frame( edge_list )
ggraph(graph_Data, layout = 'dendrogram') +
geom_edge_diagonal() +
geom_node_text(aes( label=name, color="red")) +
theme_void()
输出
自定义树状图中的节点
为了自定义树状图中的标签,我们使用geom_node_point(),它将把节点连同颜色一起添加到图中,形成一个层次结构。
# libraries
library(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])
)
# 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)
edge_list=rbind(edges_level1_2, edges_level2_3)
# Now we can plot that
graph_Data <- graph_from_data_frame( edge_list )
ggraph(graph_Data, layout = 'dendrogram') +
geom_edge_diagonal() +
geom_node_text(aes( label=name, color="red")) +
geom_node_point(aes(color ="Blue"))+
theme_void()
输出