визуализация графа в R базисной симметричной матрице, имеющей значения по диагонали - PullRequest
1 голос
/ 29 марта 2019

У меня есть симметричная матрица, которую я немного изменил: Sample Data

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

Эта матрица показывает, сколько раз человек (A, B, C, D, E) работает с другим человеком над публикацией.например, B и C работали 3 раза вместе, аналогично A и E работали 4 раза вместе.Теперь диагональные значения представляют, сколько раз человек работал индивидуально, например, B работал над 4 публикациями (либо в одиночку, либо с кем-то еще), так же как C работал над 3 публикациями.

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

Final Graph

На графике размер круга узла зависит от количества публикаций, над которыми работал человек, например, круг B самый большойпоскольку его диагональное значение является максимальным, а A & E наименьшим, поскольку они имеют самые низкие диагональные значения.Кроме того, толщина кромки между узлами зависит от того, сколько раз они работали вместе, например, толщина кромки между A & E максимальна, поскольку они работали 4 раза вместе, по сравнению с толщиной кромки (меньше, чем толщина кромки между A & E) между B & Cкак они работали 3 раза вместе.

Я могу описать соотношение между толщиной основания двух человек, однако включение диагональных значений создает для меня проблемы.Возможно ли сделать это в R?Любые выводы будут высоко оценены

1 Ответ

1 голос
/ 29 марта 2019

Вы можете сделать это с пакетом igraph. Поскольку диагональ означает нечто отличное от других элементов матрицы, я разделил матрицу на две части: диагональ и остальные.

Ваши данные

SM = as.matrix(read.table(text="A B C D E
    1 2 1 1 4
    2 4 3 2 1
    1 3 3 1 2
    1 2 1 2 1
    4 1 2 1 1",
header=TRUE))
rownames(SM) = colnames(SM)

library(igraph)

AM = SM
diag(AM) = 0
D = diag(SM)

g = graph_from_adjacency_matrix(AM, 
    mode     = "undirected",
    weighted = TRUE)
plot(g, 
    edge.width=E(g)$weight, 
    vertex.size = 10+3*D)

Weighted graph

...