【发布时间】: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