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


22

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

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

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


Я пытался использовать 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). Он позволяет вам работать с однонаправленными и ориентированными графами и имеет немало уже реализованных алгоритмов анализа.


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).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.