Построение направленных мультиграфов в R

Я никогда не использовал какой-либо пакет для построения графиков в R, я знаком с основными командами построения графиков и с пакетом ggplot2. Я нашел (но еще не пробовал) пакеты Rgraphviz, network и igraph. Поэтому я хотел бы спросить вас, какой пакет имеет самую простую кривую обучения и удовлетворяет следующим требованиям:

  • Имеет простые механизмы компоновки (пружинная компоновка, случайная, ...)
  • Пытается нарисовать несколько ребер между двумя вершинами так, чтобы они не перекрывались. В качестве бонуса было бы неплохо иметь возможность настроить это.
  • Может рисовать петли.
  • Метки вершин и ребер, размер и цвет вершин и ребер настраиваются.
  • (Нет необходимости в каких-либо алгоритмах графа, таких как анализ ссылок, кратчайший путь, максимальный поток и т. д., но неплохо, если они есть)

person Timo    schedule 04.04.2011    source источник


Ответы (2)


Пакет igraph соответствует вашим требованиям, а функция tkplot() помогает настроить окончательный макет, если нужный.

Вот пример использования:

s <- cbind(A=sample(letters[1:4], 100, replace=TRUE),
           B=sample(letters[1:2], 100, replace=TRUE))
s.tab <- table(s[,1], s[,2])
library(igraph)
s.g <- graph.incidence(s.tab, weighted=T)
plot(s.g, layout=layout.circle, 
     vertex.label=c(letters[1:4],letters[2:1]),     
     vertex.color=c(rep("red",4),rep("blue",2)), 
     edge.width=c(s.tab)/3, vertex.size=20, 
     vertex.label.cex=3, vertex.label.color="white")

введите здесь описание изображения

С интерактивным отображением (есть возможность использовать rgl для 3D-отображения) это выглядит так (после этого я немного сдвинул одну вершину):

tkplot(s.g, layout=layout.circle, vertex.color=c(rep("red",4),rep("blue",2)))

введите здесь описание изображения

Наконец, вы даже можете экспортировать свой график в наиболее распространенный формат, например dot для графической визуализации.

person chl    schedule 01.05.2011
comment
Спасибо. Я попробую igraph, когда мне снова понадобится строить графики! Просто для информации, я пошел с RGraphviz после того, как задал вопрос, и ушел от требования рисования нескольких ребер, немного переформулировав свою первоначальную задачу. - person Timo; 02.05.2011
comment
@Timo Приятно слышать, что вы нашли свой путь с помощью graphviz. Я тоже часто его использую. Просто igraph самый мощный, имхо. (кстати, мой +1 к вашему вопросу, у меня не было голосов, когда я ответил :-) - person chl; 02.05.2011

Пакет R multigraph также может быть полезен. Для приведенного выше примера bmgraph строит такой график:

library("multigraph")
bmgraph(s.tab, layout = "circ", pch = 16:16, pos = 0, vcol = 6:7, lwd = 3, cex = 9)

введите здесь описание изображения



И для направленной версии:

bmgraph(s.tab, "circ", pch = 16:16, pos = 0, vcol = 6:7, lwd = 3, cex = 9, directed = TRUE)

введите здесь описание изображения

person JARO    schedule 16.09.2016