使用ggraph绘制树层次结构

时间:2018-07-11 04:19:58

标签: r ggplot2 graph hierarchy ggraph

我有以下tree hierarchy data.frame

hierarchy.df <- data.frame(raw=rep("Unclustered",26),
                           cluster.itr1="1.1,1.1,1.3,1.2,1.2,1.1,1.3,1.2,1.3,1.3,1.6,1.3,1.2,1.4,1.3,1.3,1.3,1.2,1.1,1.3,1.2,1.3,1.3,1.6,1.4,1.5",
                           cluster.itr2="2.1,2.2,2.3,2.4,2.4,2.1,2.5,2.6,2.7,2.8,2.9,2.3,2.10,2.11,2.5,2.8,2.12,2.13,2.14,2.3,2.4,2.15,2.8,2.16,2.17,2.18",
                           cluster.itr3="3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,3.10,3.11,3.12,3.13,3.14,3.15,3.16,3.17,3.18,3.19,3.20,3.5,3.21,3.22,3.23,3.24,3.25",
                           cluster.itr3="4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,4.10,4.11,4.12,4.13,4.14,4.15,4.16,4.17,4.18,4.19,4.20,4.21,4.22,4.23,4.24,4.25,4.26",
                           stringsAsFactors = F)

它描述了一个迭代的聚类过程,我们从未聚类的数据(hierarchy.df$Unclustered)开始,然后在每个迭代中重新聚簇上一个迭代中的每个单独的聚类。当无法再将任何群集分解为更精细的群集时,就可以达到收敛。

在此示例中,经过4次迭代已经达到收敛。

我正在尝试使用hierarchy软件包绘制此ggraph

hierarchy.df$pathString <- do.call(paste,c(hierarchy.df,sep="/"))
hierarchy.graph <- data.tree::as.Node(hierarchy.df)
hierarchy.igraph <- data.tree::as.igraph.Node(hierarchy.graph)
igraph::V(hierarchy.igraph)$class <- names(igraph::V(hierarchy.igraph))

ggraph::ggraph(hierarchy.igraph,layout='tree')+
  ggraph::geom_edge_link(arrow=arrow(length=unit(3,'mm')),end_cap=ggraph::circle(1,'mm'))+
  ggraph::geom_node_label(aes(label=class))+theme_void()

这给了我: enter image description here

所以这里的错误是迭代1的簇1.3从根向上指向,而不是与该迭代的所有其他簇齐平,因此树看起来很糟。

有什么想法要解决这个问题或使用另一个绘图程序包来实现吗?

1 个答案:

答案 0 :(得分:1)

在您的示例图中,看起来错误的节点被设置为根。您可以在ggraph()调用中将其他参数传递给布局算法,从而允许您明确指定根节点应为:

ggraph::ggraph(hierarchy.igraph,layout='tree', 
               root = "Unclustered")