Teoría de grafos - análisis y visualización

22

No estoy seguro de que el sujeto entre en el interés CrossValidated. Me lo dirás

Tengo que estudiar un gráfico (de la teoría de gráficos ), es decir. Tengo una cierta cantidad de puntos que están conectados. Tengo una tabla con todos los puntos y los puntos de los que depende cada uno. (También tengo otra tabla con las implicaciones)

Mis preguntas son:
¿Existe un buen software (o un paquete R) para estudiar tan fácilmente?
¿Hay una manera fácil de mostrar el gráfico?

RockScience
fuente
He intentado usar cran.r-project.org/web/packages/graph/vignettes/graph.pdf pero parece que el paquete "Rgraphviz" ya no está disponible. Alguien tiene otra solución?
RockScience
1
Rgraphviz está en bioconductor: bioconductor.org/packages/release/bioc/html/Rgraphviz.html
Rob Hyndman
1
¡Gracias! Graphviz es perfecto y muy flexible, lo uso en R con la interfaz Rgraphviz y funciona muy bien.
RockScience

Respuestas:

15

iGraph es una biblioteca de lenguaje cruzado muy interesante (R, Python, Ruby, C). Le permite trabajar con gráficos no dirigidos y dirigidos y tiene bastantes algoritmos de análisis ya implementados.

nico
fuente
1
(+1) Parece que mi respuesta vino después de la tuya. Como su respuesta resalta una perspectiva algo diferente (multiplataforma, algoritmos), siento que nuestras respuestas no son tan redundantes, pero puedo eliminar las mías sin ningún problema.
chl
14

Hay varios paquetes para representar gráficos dirigidos y no dirigidos, matriz de incidencia / adyacencia, etc., además del gráfico ; mira por ejemplo en la vista de tareas gR .

Para la visualización y el cálculo básico, creo que el paquete igraph es confiable, además de Rgraphviz (en BioC como lo señaló @Rob). Tenga en cuenta que para que este último funcione correctamente, graphviz también debe estar instalado. El paquete igraph tiene buenos algoritmos para crear buenos diseños, al igual que graphviz .

Aquí hay un ejemplo de uso, comenzando desde una matriz de adyacencia falsa:

adj.mat <- matrix(sample(c(0,1), 9, replace=TRUE), nr=3)
g <- graph.adjacency(adj.mat)
plot(g)

texto alternativo

chl
fuente
Gracias por tu respuesta. Graphviz no es fácil de instalar con R, pero parece ser una gran biblioteca
RockScience
Para su información, lo que hago ahora es generar el código graphviz con R y lo leo en un mediawiki usando la extensión de mediawiki graphviz. (El paquete Rgraphviz no es fácil de instalar y no funciona con la última versión de R)
RockScience
"El paquete 'gráfico' se eliminó del repositorio de CRAN".
bartektartanus
8

Aparte de lo que se ha dicho, solo para la tarea de uso habitual (y fuera de R), es posible que le interese comprobar Gephi .

F. Tusell
fuente
8

Otra opción es el paquete statnet. Statnet tiene funciones para todas las medidas comúnmente utilizadas en SNA, y también puede estimar modelos ERG. Si tiene sus datos en una lista de bordes, lea los datos de la siguiente manera (suponiendo que su marco de datos esté etiquetado como "lista de bordes"):

net <- as.network(edgelist, matrix.type = "edgelist", directed = TRUE) #if the network is directed, otherwise: directed = FALSE

Si sus datos están en una matriz de adyacencia, reemplace el argumento matrix.type con "adyacencia":

net <- as.network(edgelist, matrix.type = "adjacency", directed = TRUE)

El paquete statnet tiene algunas capacidades de trazado muy agradables. Para hacer un diagrama simple simplemente escriba:

gplot(net)

Para escalar los nodos de acuerdo con su centralidad intermedia, simplemente haga:

bet <- betweenness(net)
gplot(net, vertex.cex = bet)

Por defecto, la función gplot usa el algoritmo Fruchterman-Reingold para colocar los nodos, sin embargo, esto se puede controlar desde la opción de modo, por ejemplo, para usar MDS para la colocación de nodos tipo:

gplot(net, vertex.cex, mode = "mds")

o para usar un diseño circular:

gplot(net, vertex.cex, mode = "circle")

Hay muchas más posibilidades, y esta guía cubre la mayoría de las opciones básicas. Para un ejemplo autónomo:

net <- rgraph(20) #generate a random network with 20 nodes
bet <- betweenness(net) #calculate betweenness scores
gplot(net) #a simple plot
gplot(net, vertex.cex = bet/3) #nodes scaled according to their betweenness centrality, the measure is divided by 3 so the nodes don't become to big.
gplot(net, vertex.cex = bet/3, mode = "circle") #with a circle layout
gplot(net, vertex.cex = bet/3, mode = "circle", label = 1:20) #with node labels
Thomas Jensen
fuente
(+1) Nunca usé este paquete, pero su descripción general sugiere que debería probarlo. Parece bueno a primera vista.
chl
3

Se hizo una pregunta similar en teoría, también si está específicamente interesado en gráficos planos o visualización bibliográfica .

Gephi ya se mencionó aquí, pero también algunos lo recomendaron en teoría, por lo que creo que es una buena opción.

Otras opciones interesantes incluyen:

  • Flare proporciona algunas herramientas de visualización realmente geniales y crea gráficos muy bonitos para informes y documentos.
  • Cyptoscape tiene algunas herramientas de análisis y visualización muy potentes. Es particularmente bueno para la química y la biología molecular.
  • Este sitio web proporciona enlaces a muchas otras herramientas y bibliotecas de visualización agradables (aunque no para R).
Artem Kaznatcheev
fuente
2

NodeXL me pareció muy útil y fácil de usar. Es una plantilla de MS Excel que proporciona fácil importación / exportación de un gráfico, formateo de bordes / vértices, calcula algunas métricas, tiene algunos algoritmos de agrupamiento. Puede usar fácilmente imágenes personalizadas como vértices.
Otra herramienta útil para mí fue el diseño de Microsoft Automatic Graph, que proporciona un buen diseño que se puede probar en línea (con un navegador que admita SVG).

Kniganapolke
fuente