如何在R中无需机器学习包将汇总表可视化为树形流程图?
在R中无需机器学习包绘制层级树形图(基于汇总表)
完全可以不用机器学习包,借助专注于层级结构可视化的工具就能实现需求。下面提供两种实用方案,均无需构建决策树模型,仅基于你的汇总表数据生成树形图,严格保留步骤顺序:
先准备示例数据
首先把你的汇总表转换成R可处理的数据框:
df <- data.frame( First_step = c("A", "A", "A", "A", "A"), Second_step = c("B1", "B1", "B1", "B2", "B2"), Third_step = c("C1", "C2", "C3", "C2", "C4"), Numeric = c(3, 4, 7, 3, 8) )
方案1:ggraph + igraph(灵活适配复杂结构)
这套组合基于tidyverse生态,适合需要自定义样式的场景:
library(tidyverse) library(igraph) library(ggraph) # 构建层级边列表:第一步→第二步、第二步→第三步 edges_first_second <- df %>% distinct(First_step, Second_step) %>% rename(from = First_step, to = Second_step) edges_second_third <- df %>% distinct(Second_step, Third_step) %>% rename(from = Second_step, to = Third_step) all_edges <- bind_rows(edges_first_second, edges_second_third) # 创建图对象 tree_graph <- graph_from_data_frame(all_edges, directed = TRUE) # 为叶子节点添加Numeric数值标签 node_numeric <- df %>% select(name = Third_step, Numeric) %>% distinct() V(tree_graph)$Numeric <- ifelse(V(tree_graph)$name %in% node_numeric$name, node_numeric$Numeric[match(V(tree_graph)$name, node_numeric$name)], NA) # 生成树形图 ggraph(tree_graph, layout = "tree") + geom_edge_link(arrow = arrow(length = unit(2, 'mm')), end_cap = circle(3, 'mm')) + geom_node_label(aes(label = paste0(name, "\n", ifelse(is.na(Numeric), "", Numeric))), fill = "white", size = 3) + theme_graph()
运行后会生成带箭头的层级树形图,叶子节点显示对应的Numeric值,完全匹配你的步骤顺序。
方案2:diagram包(轻量快速生成)
如果不需要复杂样式,用diagram包可以快速绘制简单树形图:
library(diagram) # 初始化绘图画布 openplotmat(main = "层级汇总树形图") # 定义所有节点标签(包含Numeric值) nodes <- c("A", "B1", "B2", "C1\n3", "C2\n4", "C3\n7", "C2\n3", "C4\n8") # 自动生成树形布局坐标 pos <- coordinates(nodes, layout = "tree") # 绘制节点与连接线 plotmat(pos, name = nodes, box.type = "rect", box.size = 0.15, arr.type = "triangle", arr.length = 0.2)
这种方式无需复杂数据转换,直接定义节点即可生成树形图,步骤顺序可通过节点列表的顺序严格控制。
内容的提问来源于stack exchange,提问作者Marco Ballerini
相关产品推荐
相关产品推荐

