2012-02-26 7 views
6

Estoy tratando de dibujar un gráfico donde la distancia entre vértices corresponde a los pesos de borde * y he encontrado que en graphviz hay una manera de dibujar dicho gráfico. ¿Hay alguna manera de hacer esto en R con el paquete igraph (específicamente con graph.adkacency)?Visualizando la distancia entre nodos de acuerdo con los pesos - con R

Gracias,

Noam

Respuesta

4

Esto no es posible que necesite la igualdad triángulo para cada triángulo para poder trazar tales un objeto. Entonces solo puedes aproximarte. Para esto puedes usar algoritmos "forzados incrustados". Hay algunos en igraph. El que uso a menudo es el algoritmo de Fruchterman-Reingold.

Ver para más detalles:

library("igraph") 
?layout.fruchterman.reingold 

Editar:

Tenga en cuenta que la distancia entre los nodos se corresponden tanto con la inversa del peso borde absoluta.

3

Como mencionó Sacha Epskamp, ​​a menos que sus datos sean perfectos, no puede dibujar un gráfico que no viole algunas desigualdades triangulares. Sin embargo, existen técnicas denominadas Multidimensional scaling (MDS) dirigidas a minimizar tales violaciones.

Una implementación en R es cmdscale del paquete stats. Lo recomendaría el ejemplo en la parte inferior de ?cmdscale:

> require(graphics) 
> 
> loc <- cmdscale(eurodist) 
> x <- loc[,1] 
> y <- -loc[,2] 
> plot(x, y, type="n", xlab="", ylab="", main="cmdscale(eurodist)") 
> text(x, y, rownames(loc), cex=0.8) 

Por supuesto, puede trazar x y y usar ningún paquete de gráficos (que preguntábamos sobre igraph específicamente).

Finalmente, estoy seguro de que encontrará muchas otras implementaciones si busca "escalamiento multidimensional" o "MDS". Buena suerte.

+2

También tenga en cuenta que hay una función llamada 'layout.mds' en' igraph' que parece realizar MDS en una matriz de distancia completa para obtener las coordenadas de diseño. –

Cuestiones relacionadas