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


22

Я не впевнений, що тема вступає в цікавий інтерес. Ти скажи мені.

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

Мої запитання:
чи є гарне програмне забезпечення (або пакет 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) Здається, моя відповідь прийшла після вашої. Оскільки ваша відповідь підкреслює дещо іншу точку зору (крос-платформи, алгоритми), я відчуваю, що наші відповіді не такі вже й зайві, але я можу видалити шахту без будь-яких проблем.
chl

14

На додаток до графіка існують різні пакети для представлення спрямованих та непрямих графіків, матриці захворюваності / суміжності тощо . шукайте, наприклад, перегляд завдання gR .

Щодо візуалізації та базових обчислень, я думаю, що пакет igraph є надійним, крім Rgraphviz (на BioC, як вказував @Rob). Майте на увазі, що для останньої роботи належним чином, графівіз також повинен бути встановлений. Пакет igraph має приємні алгоритми для створення гарних макетів, подібно до графівізу .

Ось приклад використання, починаючи з підробленої матриці суміжності:

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

alt текст


Дякую за вашу відповідь. встановити graphviz не просто, але це здається чудовою бібліотекою
RockScience

FYI, що я зараз роблю, це те, що я генерую код graphviz з R і читаю його в mediawiki, використовуючи розширення mediawiki graphviz. (Пакет Rgraphviz непростий у встановленні і не працює з останньою версією R)
RockScience

"Пакет" графік "видалено з сховища CRAN."
bartektartanus

8

Окрім сказаного, лише для завдання вузуалізації (а також поза R) вам може бути цікаво перевірити Gephi .


8

Інший варіант - пакет statnet. Statnet має функції для всіх часто використовуваних заходів у СНР, а також може оцінювати моделі 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 для розміщення вузлів, однак цим можна керувати за допомогою параметра mode, наприклад, використовувати 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) Ніколи не використовував цей пакет, але ваш огляд пропонує, що я повинен спробувати його. Здається добре з першого погляду.
chl

3

Аналогічне питання було поставлено питання про cstheory, а також , якщо ви конкретно зацікавлені в плоских графах , або бібліографічною візуалізації .

Тут уже згадувалося про Гефі, але його також рекомендували нечисленні в теорії, тому я думаю, що це хороший вибір.

Інші цікаві варіанти включають:

  • Flare надає кілька дійсно класних інструментів візуалізації та створює дуже гарну графіку для звітів та робіт.
  • Cyptoscape має дуже потужні інструменти для аналізу та візуалізації. Це особливо добре для хімії та молекулярної біології.
  • Цей веб-сайт містить посилання на багато інших приємних засобів візуалізації та бібліотек (хоча не для R).

2

Я знайшов NodeXL дуже корисним і простим у використанні. Це шаблон MS Excel, який забезпечує простий імпорт / експорт графіка, форматування ребер / вершин, обчислює деякі показники, має деякі алгоритми кластеризації. Ви можете легко використовувати власні зображення як вершини.
Іншим корисним інструментом для мене був макет Microsoft Automatic Graph, який забезпечує хороший макет, який можна спробувати в Інтернеті (за допомогою браузера, який підтримує SVG).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.