Постройте древовидный график с помощью ggplot - PullRequest
0 голосов
/ 08 июня 2018

У меня есть иерархические данные в этой форме:

df <- data.frame(root=rep("unclustered",22),
  itr1=paste0("1.",c(1,5,1,2,4,1,3,2,5,5,6,9,4,3,4,8,5,7,3,2,10,8)),
  itr2=paste0("2.",c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,10,17,18,19,20,21)),
  itr3=paste0("3.",c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)),stringsAsFactors = F)

, которая описывает итеративное кластерное назначение точек данных - строк.Первый столбец, root, назначает все точки корневому кластеру, затем каждый столбец представляет собой итерацию кластеризации, которая отбирает кластеры предыдущей итерации и разбивает их на дальнейшие подкластеры.

IЯ пытаюсь построить этот процесс, используя древовидную сеть.

Я знаю, что используя data.tree, я могу просто сделать:

df$pathString <- do.call(paste,c(df,sep="/"))
df.graph <- data.tree::as.Node(df)
plot(df.graph)

enter image description here

Но я ищу что-то более изощренное, желательно с ggplot внешним видом.

Поэтому я преобразовал df.graph в igraph объект:

df.igraph <- data.tree::as.igraph.Node(df.graph)

И пытался использовать ggraph:

library(ggraph)
ggraph(df.igraph, 'igraph', algorithm = 'tree') + 
  geom_edge_link() +
  ggforce::theme_no_axes()

enter image description here

Любая идея, как получить вариант ggraph для включения узлов с ихнадписи, добавить стрелки к краям и, возможно, по-разному раскрасить каждый уровень?

1 Ответ

0 голосов
/ 09 июня 2018

Это, кажется, приближает меня:

V(df.igraph)$class <- names(V(df.igraph))

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

enter image description here

...