【问题标题】:Plotting a tree hierarchy using ggraph使用 ggraph 绘制树层次结构
【发布时间】:2018-12-19 00:09:18
【问题描述】:

我有以下treehierarchydata.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 次迭代后达到收敛。

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

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()

这给了我:

所以这里的问题是迭代 1 的集群 1.3 从根指向上方,而不是与该迭代的所有其他集群齐平,因此树看起来很糟糕。

知道如何解决此问题或使用另一个绘图包来执行此操作吗?

【问题讨论】:

  • 我想你可能想明确地传递根节点,比如ggraph::ggraph(hierarchy.igraph,layout='tree', root = "Unclustered")。但我无法正确测试,尝试运行您的示例代码时得到奇怪的结果(每个级别的所有节点都粘贴/组合到一个节点中)
  • 成功了。谢谢!
  • @Marius 也许添加您的解决方案作为答案?将来可能会帮助其他人,然后我们可以关闭此问题。

标签: r ggplot2 graph hierarchy ggraph


【解决方案1】:

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

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

【讨论】:

  • 谢谢@Marius。你会碰巧知道如何为每个进化枝(从根部)涂上不同的颜色吗?如果您认为它值得单独发布,我可以将其作为单独的问题发布。
猜你喜欢
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2013-08-07
  • 2018-10-07
  • 2018-10-01
相关资源
最近更新 更多