Теория графов - анализ и визуализация

22

Я не уверен, что предмет входит в CrossValidated интерес. Вы скажете мне.

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

Мои вопросы:
есть ли хорошее программное обеспечение (или пакет R), чтобы легко его изучить?
Есть ли простой способ отображения графика?

RockScience
источник
Я пытался использовать cran.r-project.org/web/packages/graph/vignettes/graph.pdf, но кажется, что пакет "Rgraphviz" больше не доступен. У кого-нибудь есть другое решение?
RockScience
1
Rgraphviz находится на биокондукторе: bioconductor.org/packages/release/bioc/html/Rgraphviz.html
Роб Хиндман
1
Благодарность! Graphviz идеален и очень гибок, я использую его в R с интерфейсом Rgraphviz, и он прекрасно работает.
RockScience

Ответы:

15

iGraph - очень интересная библиотека на разных языках (R, Python, Ruby, C). Он позволяет вам работать с однонаправленными и ориентированными графами и имеет немало уже реализованных алгоритмов анализа.

Nico
источник
1
(+1) Кажется, мой ответ пришел после твоего. Поскольку ваш ответ выдвигает на первый план несколько иную точку зрения (кроссплатформенность, алгоритмы), я чувствую, что наши ответы не так уж избыточны, но я могу удалить свои без каких-либо проблем.
хл
14

Существуют различные пакеты для представления ориентированных и ненаправленных графов, матрицы инцидентности / смежности и т. Д. В дополнение к графу ; посмотрите, например, на представление задач gR .

Для визуализации и базовых вычислений, я думаю, пакет igraph является надежным, в дополнение к Rgraphviz (на BioC, как указано @Rob). Имейте в виду, что для того, чтобы последний работал правильно, также должен быть установлен graphviz . В пакете igraph есть хорошие алгоритмы для создания хороших макетов, очень похожих на graphviz .

Вот пример использования, начиная с ложной матрицы смежности:

adj.mat <- matrix(sample(c(0,1), 9, replace=TRUE), nr=3)
g <- graph.adjacency(adj.mat)
plot(g)

альтернативный текст

хл
источник
Спасибо за Ваш ответ. Graphviz нелегко установить с помощью R, но он кажется отличной библиотекой
RockScience
Кстати, теперь я генерирую код GraphViz с помощью R и читаю его в MediaWiki с использованием расширения MediaWiki GraphViz. (Пакет Rgraphviz не прост в установке и не работает с последней версией R)
RockScience
«Пакет« graph »был удален из репозитория CRAN».
bartektartanus
8

Помимо сказанного, для одной задачи по визуализации (и вне R) вам может быть интересно проверить Gephi .

Ф. Туселл
источник
8

Другим вариантом является пакет statnet. Statnet имеет функции для всех обычно используемых показателей в SNA, а также может оценивать модели ERG. Если у вас есть данные в списке ребер, прочитайте данные следующим образом (при условии, что ваш фрейм данных помечен как «список краев»):

net <- as.network(edgelist, matrix.type = "edgelist", directed = TRUE) #if the network is directed, otherwise: directed = FALSE

Если ваши данные находятся в матрице смежности, вы заменяете аргумент matrix.type на «смежность»:

net <- as.network(edgelist, matrix.type = "adjacency", directed = TRUE)

Пакет statnet обладает очень хорошими возможностями построения графиков. Чтобы сделать простой график, просто наберите:

gplot(net)

Чтобы масштабировать узлы в соответствии с их центральностью, просто выполните:

bet <- betweenness(net)
gplot(net, vertex.cex = bet)

По умолчанию функция gplot использует алгоритм Fruchterman-Reingold для размещения узлов, однако это можно контролировать с помощью опции режима, например, для использования MDS для размещения типа узлов:

gplot(net, vertex.cex, mode = "mds")

или использовать макет круга:

gplot(net, vertex.cex, mode = "circle")

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

net <- rgraph(20) #generate a random network with 20 nodes
bet <- betweenness(net) #calculate betweenness scores
gplot(net) #a simple plot
gplot(net, vertex.cex = bet/3) #nodes scaled according to their betweenness centrality, the measure is divided by 3 so the nodes don't become to big.
gplot(net, vertex.cex = bet/3, mode = "circle") #with a circle layout
gplot(net, vertex.cex = bet/3, mode = "circle", label = 1:20) #with node labels
Томас Дженсен
источник
(+1) Никогда не использовал этот пакет, но ваш обзор предлагает мне попробовать. Кажется хорошим с первого взгляда.
хл
3

Аналогичный вопрос был задан вопрос о cstheory, а также , если вы конкретно заинтересованы в плоских графах , или библиографической визуализации .

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

Другие интересные варианты включают в себя:

  • Flare предоставляет несколько действительно классных инструментов визуализации и создает очень симпатичную графику для отчетов и работ.
  • Cyptoscape имеет несколько очень мощных инструментов анализа и визуализации. Это особенно хорошо для химии и молекулярной биологии.
  • Этот веб-сайт предоставляет ссылки на многие другие приятные инструменты визуализации и библиотеки (хотя не для R).
Артем Казнатчеев
источник
2

Я нашел NodeXL очень полезным и простым в использовании. Это шаблон MS Excel, который обеспечивает простой импорт / экспорт графика, форматирование ребер / вершин, вычисляет некоторые метрики, имеет некоторые алгоритмы кластеризации. Вы можете легко использовать пользовательские изображения в качестве вершин.
Другим полезным инструментом для меня была автоматическая разметка Microsoft Graph, которая обеспечивает хорошую разметку, которую можно попробовать онлайн (с браузером, поддерживающим SVG).

Kniganapolke
источник