2016-10-14 2 views
1

이진 트리 구조는 igraph 개체로 표시됩니다.팬으로 igraph 개체를 배열

enter image description here

library(igraph) 
df = data.frame(subregion = c("Africa", "Europe", "Asia", "Namibia", "Kenya", "Egypt", "Belgium", "China", "India"), 
     region = c("World", "World", "World", "Africa", "Africa", "Africa", "Europe", "Asia", "Asia")) 
df_graph = graph_from_data_frame(df, directed = F) 
plot(df_graph, layout = layout_as_tree(df_graph, root = "World")) 
동등하게 서로 다른 것을 같은 레벨에있는 노드 세 계층 수준이 있습니다. 지금은 당신이 dendrogram은 함께 할 수있는 것처럼, 팬 등이 그래프를 레이아웃 할 : 그것은 때문에 그러나

enter image description here

df_graph_cl = cluster_fast_greedy(df_graph) 
plot_dendrogram(df_graph_cl, type = "fan") 
는 노드 사이의 원래 관계는 dendrogram은 보존되지 않습니다 이진
트리. 어떻게 팬 드로잉 그래프로 변환하지 않고 그래프를 레이아웃하는 방법에 대한 아이디어가 있습니까?

+0

이 일반적 이진 분할이 dendrograms 그리고 그를 무엇 R 플로팅 대부분의 기능 취하다. 그리고 일반적으로 분할이 그려지는 곳은 멍멍에 의미가 있습니다. 잘못된 시각화와 같은 것으로 데이터를 강제 적용하려는 이유는 무엇입니까? – MrFlick

+0

고마워요, MrFlick. 이유는 650 개의 팁이 있고 "팬"과 같은 레이아웃을 사용하기 때문입니다. 일반 그래프에는 레이아웃 옵션이없는 것 같습니다. – Hav0k

+1

진정한 목표가 팬을 그리는 것이라면 왜 그런 말을하지 않았습니까? 왜 dendrogram이 먼저 필요합니까? 중간의 "솔루션"을 만드는 것보다 실제 원하는 출력이 무엇인지 분명히하기 위해 질문을 편집하는 것이 좋습니다. – MrFlick

답변

0

나는 이제 해결 방법을 생각해 내고 그것을 공유 할 것이라고 생각했습니다. 핵심은 그래프를 NEWICK 형식으로 변환하는 것이 었습니다. 이를 위해 먼저 그래프에 깊이 우선 검색을 수행하고 NEWICK 문자열을 생성하는 약간의 function을 작성해야했습니다.

지금, 예제 데이터를 수 사용하여 쉽게 수행 원하는 출력 생산

library(phytools) 
newick = graph_to_newick(df_graph, root = "World") 
df_tree = collapse.singles(read.newick(text = newick)) 
plot(df_tree, type = "fan") 

:

enter image description here