varias superponer lineas graficos grafico graficas ggplot dispersion r graph path igraph

superponer - varias graficas en r



Lee un gráfico dirigido en R (2)

Tengo problemas para leer / crear un gráfico dirigido. Seguí los pasos que he encontrado aquí .

Este es mi archivo de texto graph.txt :

1 2 1 3 2 5 3 4 3 5 4 5 5 6 5 10 6 7 7 8 7 9 7 12 8 9 9 10 9 11 9 12 10 11 11 7 11 12

Ahora leo este graph.txt :

library("igraph") xlist<-read.graph("graph.txt", format="edgelist")

Y luego lo trazo:

plot(xlist)

Pero no es el gráfico que leí en xlist:

Como puede ver, no hay flanco entre 1-> 2, 1-> 3, 5-> 10, etc. ¿Cómo puedo leer el gráfico dirigido correctamente?

Una vez hecho esto, ¿cómo puedo mostrar todos los caminos más cortos entre dos nodos?


El motivo del error es que los archivos de la lista de bordes (es decir, el formato "edgelist" ) "edgelist" los vértices desde cero. Esto es igual en todas las versiones de igraph, incluso si los paquetes recientes de R igraph cuentan los vértices de uno.

La razón de esto es que queremos que R igraph sea consistente con el igraph de Python y C igraph, en lo que respecta a los formatos de archivo. Es decir, un archivo (en este caso, un archivo de lista de bordes) escrito por el igrafo de Python se interpreta de la misma manera por R igraph y Python igraph. La numeración basada en cero es una propiedad del formato de archivo.

Si ya tiene un archivo de lista de bordes que comienza a numerar los vértices con uno, ese no es el formato de archivo edgelist de edgelist , y necesita convertirlo, simplemente restando uno de cada id de vértice.

Una solución alternativa es leer en el archivo con scan() o read.table() ( scan() es mucho más rápido, lo que podría ser importante si tiene archivos grandes), y luego llamar a graph() directamente. En este caso, no es necesario restar uno, porque en R igraph los ID de los vértices están numerados de uno.


Esto parece funcionar bien para mí:

xlist<-read.table("graph.txt") xlist <- graph.data.frame(xlist) plot(xlist)

Nota R cambia nodos y los indexa desde cero hacia arriba (no en la actualización de igraph más reciente como comentarios de @Sacha Epskamp a continuación). Utilizando:

plot(xlist, vertex.label= V(xlist)$name)

Verás los nombres que quieras. es decir, bordes entre 1 y 2.

Una forma de trazar las rutas más cortas es usar get.all.shortest.paths y luego usar esto para subconjuntar su gráfica y sobrerregularla. Vea mi respuesta a esta pregunta para un ejemplo similar donde trazo un árbol de expansión.