2013-06-27 4 views
3

У меня есть набор данных, как следующее (это будет произвольной длины, но с одной счета колонки в конце):легко печатать красиво выглядящее дерево диаграммы из данных в R

dd <- data.frame(
    "level1" = c("a", "a", "b"), 
    "level2" = c("c", "d", "c"), 
    "cnt" = c(1, 3, 5) 
) 

и я как распечатать красиво выглядящее дерево этой структуры, без тонны работы :). Уже попытался просто сделать вид и посмотреть на граничные условия для вывода данных.

В идеале структура дерева будет выглядеть следующим образом из приведенных выше данных:

level1  level2 
a: 4 ---> c: 1 
     ---> d: 3 
b: 5 ---> c: 5 

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

Изображение графа: enter image description here

+3

Можете ли вы объяснить, почему у вас есть 'b' в два уровня? Вы имели в виду 'd' вместо этого? – asb

+3

Кроме того, у вас всегда есть только два столбца с произвольным количеством строк? Или вы можете иметь произвольное количество уровней (столбцов)? – asb

+0

Good Q's asb. Произвольное число уровней. – mcpeterson

ответ

1

Использование igraph пакета, например, вы можете получить с небольшой работой. Я исправил некоторые опечатки в ваших данных и добавил новый край, чтобы получить более красивый график. Мой график похож на этот:

enter image description here

А вот мой R код:

actors <- data.frame(name=c('a','b','c','d')) 
relations <- data.frame(from=c("a", "a", "b",'c'), 
         to=c("c", "b", "c",'d'), 
         weight=c(1, 3, 5,4)) 
g <- graph.data.frame(relations, directed=TRUE, 
         vertices=actors) 

E(g)$label=E(g)$weight 
E(g)$label.cex=3 
plot(g,edge.width=E(g)$weight,layout=layout.fruchterman.reingold) 
+0

Я должен был указать более четко, но мне нужно решить это для произвольного случая, и его непонятно, как заполнить ваши кадры с вашим персонажем и отношениями из произвольного набора данных формы, которую я предоставил. Другими словами, как бы вы могли работать с DD, чтобы генерировать график? Кроме того, это действительно должно быть дерево от одного уровня к другому. Никакие значения в «level2» dd никогда не будут указаны совместно двумя значениями из «level1». – mcpeterson

+0

. Связи @mcpeterson - это ваш DD, но я предполагаю, что здесь у вас есть граф, а не дерево. – agstudy