如何将R语言DiagrammeR绘制的垂直树形图转为水平?
如何用DiagrammeR绘制水平方向的树形图?
刚好我之前也碰到过这个需求,其实要把DiagrammeR默认的垂直树形图改成水平方向很简单,核心是利用它底层依赖的Graphviz布局属性来调整方向,给你两种可行的方案:
方案一:通过全局图属性设置水平布局(推荐)
DiagrammeR默认用的是垂直方向的TB(Top to Bottom)布局,我们只需要添加一个全局图属性rankdir,将其值设为LR(Left to Right),就能让树形图从左到右水平展示。修改后的完整代码如下:
library(DiagrammeR) library(dplyr) # 定义你的数据 n <- structure(list(task = c("1", "2", "3", "4", "5", "6", "7", "8", "A", "B", "C")), .Names = "task", row.names = c(NA, -11L), class = "data.frame") e <- structure(list(from = c("A", "1", "2", "4", "B", "3", "C", "5" ), to = c("1", "2", "4", "8", "3", "6", "5", "7")), .Names = c("from", "to"), row.names = c(NA, -8L), class = "data.frame") # 绘制水平树形图 create_graph() %>% add_nodes_from_table(table=n, label_col = task) %>% add_edges_from_table(table=e, from_col = from, to_col = to, from_to_map = label) %>% set_node_attrs(node_attr = "shape", values = "square") %>% # 添加全局图属性,设置布局方向为从左到右 add_global_graph_attrs(attr = "rankdir", value = "LR", attr_type = "graph") %>% render_graph(layout = "dot")
这里有两个关键调整:
- 用
add_global_graph_attrs给整个图表添加了rankdir=LR的属性,指定布局方向为左到右 - 将布局参数从
layout="tree"改为layout="dot",因为tree布局是dot的简化版,直接用dot能更好地配合rankdir属性生效
如果想要从右到左的水平布局,只需要把LR改成RL就行。
方案二:调整tree布局的节点位置(不推荐)
如果你坚持想用layout="tree",也可以通过手动调整节点的x、y坐标来实现水平效果,但这种方法需要计算节点位置,比较繁琐,远不如方案一灵活,所以更推荐第一种方法。
内容的提问来源于stack exchange,提问作者Nicolas Rosewick
相关产品推荐
相关产品推荐

