Можно ли отобразить матрицу на объект igraph? - PullRequest
2 голосов
/ 24 апреля 2019

У меня есть матрица A, которая определяет упорядоченные сегменты самопересекающегося многоугольника:

A <- t(matrix(c(
         0,  0  ,
         1,  0  ,
         1, -2  ,
        -2, -2  ,
        -2, -1  ,
         0, -1  ,
         0, -4  ,
        -1, -4  ,
        -1, -2  ,
         2, -2  ,
         2, -3  ,
         0, -3  ,
         0, 0), nrow = 2));

par(mfrow=c(1,3)) 

plot(A, col='red', type= 'l', xlim=c(min(A[,1]),max(A[,1])),
      ylim=c(min(A[,2]),max(A[,2])), xlab='x', ylab='y'); 
points(A, col='black', pch = 22); 
grid()  

Мне нужно сопоставить матрицу A с неориентированным графом, где точка (x,y) соответствуетвершине и отрезку между " соседними " точками соответствует ребро.Соседние точки (по расстоянию, но не по номеру идентификатора) соединены красными линиями на правой фигуре.

Редактировать. После комментария пользователя 20650 я сопоставил матрицу с неориентированным графом (средний граф)на рисунке).Ненаправленный график выглядит как ожидаемый результат.Но с опцией edge.curved=TRUE (справа) мы видим ребра (3,4), (6,7), (9,10) и (12, 13).

library(igraph)
g <- make_empty_graph(n=nrow(A)); 
g <- g + path(seq_len(nrow(A))); 
plot(as.undirected(g), layout=as.matrix(A))
plot(g, layout=as.matrix(A), edge.curved=TRUE)

Длина ребер должна быть равна 1.Исходя из условия, мы должны добавить 5 vetries к графику g и соответствующие ребра.

Я могу удалить ребро (3,4) и добавить ребра (3,9) и (9,4) и так далее для пар(12, 13), (9,10) и (6,7).

Вопрос. Существует ли способ такого отображения?

enter image description here

...