2016-12-07 11 views
2

Я хочу создать визуализацию графика с 4 шагами, то есть разными точками времени. Позиции моих вершин (узлов) должны всегда оставаться неизменными (используйте позиции полного графика). Все, что я хочу, - удалить некоторые вершины из графа R igraph. Кажется, что проблема заключается в том, что имена вершин меняются.igraph: удалить вершины из макета

# Erdos 
par(mfrow=c(1,3)) 
g <- erdos.renyi.game(20, 1/20) 
locs <- layout.fruchterman.reingold(g) 
V(g)$name <- V(g) 
# In the original file, vector names look like this (not "1,2,3,4...): 
V(g)$name <- as.vector(c(8,9,3,5,13,6,7,1,2,18,11,12,16,14,15,4,17,10,20,19)) 
V(g)$name 

plot(g, 
    layout=locs, 
    main="Original") 

# Remove a few vertices 
removals1 <- c("12","2","9","11","4") 
g2 <- delete.vertices(g,removals1) 
plot(g2, 
    layout=locs[-as.numeric(removals1),], 
    main="Removals") 

# Remove some more 
removals2 <- c("15","14","7","8","5","19","10") 
g3 <- delete.vertices(g2,removals2) 
plot(g3, 
    layout=locs[-as.numeric(c(removals1,removals2)),], 
    main="More Removals") 

Я был бы очень рад найти решение здесь. Возможно, есть и более элегантное решение, как и выше. Благодаря!

ответ

3

Вместо того, чтобы использовать удаление, которое каким-то образом перемещало вершины (я даже не мог полностью наложить график, метки не выдерживают), лучше использовать induced_subgraph. Я не понимаю, почему это так, но, похоже, это работает.

# Erdos 
g <- erdos.renyi.game(20, 1/20) 
locs <- layout.fruchterman.reingold(g) 
V(g)$name <- V(g) 
# In the original file, vector names look like this (not "1,2,3,4...): 
V(g)$name <- as.vector(c(8,9,3,5,13,6,7,1,2,18,11,12,16,14,15,4,17,10,20,19)) 
V(g)$name 

par(mfrow=c(1,3)) 
plot(g, 
    layout=locs, 
    main="Original") 

# Remove a few vertices 
removals1 <- c("12","2","9","11","4") 
g2 <- induced_subgraph(g, V(g)[-as.numeric(removals1)]) 
plot(g2, 
    layout=locs[-as.numeric(removals1),], 
    main="Removals") 

# Remove some more 
removals2 <- c("15","14","7","8","5","19","10") 
g3 <- induced_subgraph(g, V(g)[-as.numeric(c(removals1, removals2))]) 
plot(g3, 
    layout=locs[-as.numeric(c(removals1,removals2)),], 
    main="More Removals") 

enter image description here

1

@ ответ emiliman5 является пятно на; однако я хочу показать немного другое решение и проблему с оригиналом.

Линия locs[-as.numeric(removals1),] не снимая вершиныc("12","2","9","11","4"), а рядыc("12","2","9","11","4").

Сравнить:

> head(cbind(as_ids(V(g)),locs)) 
    [,1] [,2]    [,3]    
[1,] "8" "42.1520624498397" "29.0822309512088" 
[2,] "9" "42.9864581422991" "28.6882159221222" 
[3,] "3" "42.9653898313169" "30.9232356041607" 
[4,] "5" "46.6704380162041" "29.7404624492056" 
[5,] "13" "47.4190242396939" "28.5469829852443" 
[6,] "6" "46.6173689817953" "25.6916967155951" 

To:

> head(cbind(as_ids(V(g2)),locs[-as.numeric(removals1),])) 
    [,1] [,2]    [,3]    
[1,] "8" "42.1520624498397" "29.0822309512088" 
[2,] "3" "42.9653898313169" "30.9232356041607" 
[3,] "5" "47.4190242396939" "28.5469829852443" 
[4,] "13" "46.6173689817953" "25.6916967155951" 
[5,] "6" "44.3293887668239" "30.6957434444784" 
[6,] "7" "47.4947062707832" "27.0391131188028" 

Обратите внимание, что координаты для узла 5 различны. Проверьте, чтобы увидеть, если х-координата и у-координаты матча после Подмените:

> r1 <- cbind(as_ids(V(g)),locs) 
> r2 <-cbind(as_ids(V(g2)),locs[-as.numeric(removals1),]) 
> r1[match(r2[,1],r1[,1]),2] == r2[,2] 
[1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE 
> r1[match(r2[,1],r1[,1]),3] == r2[,3] 
[1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE 

В качестве альтернативы induced_subgraph раствора, подмножество в locs матрице с помощью индекса вершинных идентификаторов, как, например:

plot(g2, 
    layout=(locs[-which(as_ids(V(g)) %in% removals1),]), 
    main="Removals") 

линия which(as_ids(V(g)) %in% removals1) получает индекс строки из указанных вершин:

> which(as_ids(V(g)) %in% removals1) 
[1] 2 9 11 12 16 

Vertex "9" находится в строке 2, вершина "2" находится в строке 9, е дц

Для третьего графа:.

removals2 <- c("15","14","7","8","5","19","10") 
g3 <- delete.vertices(g2,removals2) 
plot(g3, 
    layout=locs[-locs[-which(as_ids(V(g)) %in% c(removals1, removals2)),], 
    main="More Removals") 

 Смежные вопросы

  • Нет связанных вопросов^_^