una sacar polilinea objetos ingles hatch editsomb deteccion crear contorno como comando bordes r plot igraph

sacar - ¿Qué diseño debo usar para obtener bordes que no se solapen en igraph?



editsomb en ingles (3)

Intento crear gráficos usando datos arborescentes, donde los nodos suelen dividirse en> 2 aristas. He intentado varios diseños, y veo que el parámetro layout.reingold.tilford generará gráficos tipo árbol con datos no bifurcados. Sin embargo, las salidas no son particularmente atractivas. Preferiría usar algo como layout.lgl o layout.kamada.kawai ya que estos producen más estructuras radiales. No puedo ver cómo cambiar los parámetros en R de modo que estos árboles no tienen bordes superpuestos. es posible?

Importé un archivo de datos simple en formato Pajek, con 355 nodos y 354 bordes. Actualmente estoy imprimiéndolo usando:

plot.igraph(g,vertex.size=3,vertex.label=NA,layout=layout.lgl)

Esto me da un resultado como este, que es bueno, pero aún tiene bordes superpuestos. He leído que puede corregirlo manualmente usando tkplot u otro programa como cytoscape; sin embargo, tengo bastantes de estos para compilar, y el tamaño de ellos hace que la corrección manual sea una molestia.

Muchas gracias.


Es posible que desee probar layout.fruchterman.reingold() . Parece hacer un buen trabajo para evitar que los bordes se crucen. Lo probé con una versión de 355 nodos del gráfico barabasi sugerido por @ Tamás.

library(igraph) g = barabasi.game(355, directed=FALSE) png("plot1.png", height=6, width=12, units="in", res=200) par(mfrow=c(1, 2)) plot.igraph(g,vertex.size=3,vertex.label=NA, layout=layout.fruchterman.reingold(g, niter=10000)) mtext("layout.fruchterman.reingold, area = vcount^2", side=1) plot.igraph(g,vertex.size=3,vertex.label=NA, layout=layout.fruchterman.reingold(g, niter=10000, area=30*vcount(g)^2)) mtext("layout.fruchterman.reingold, area = 30 * vcount^2", side=1) dev.off()


Solo quiero agregar un comentario pero mi representante es muy bajo. El método que @bdemarest publicó no funciona en la versión igraph > 0.7. La versión más nueva no admite el parámetro de area , por lo que no puedo obtener el mismo efecto. Y obtener la versión anterior para construir me llevó un tiempo, así que pensé en compartir algunas ideas. Puedes instalar el igraph 0.7 manualmente desde la fuente si lo descargas desde las compilaciones nocturnas de igraph . En mi máquina (Mac OS 10.10), encontré algunos problemas para construirlo, debido a gfortran , así que encontré este enlace que resolvió el problema. Espero que ayude a cualquiera que quiera crear gráficos similares en R.


layout.reingold.tilford tiene un parámetro llamado circular . Al establecer esto en TRUE se convertirá el diseño final en uno radial tratando la coordenada X como el ángulo (después del reescalado apropiado) y la coordenada Y como el radio. Irónicamente, esto no garantiza que no haya cruces de borde al final, pero funciona muy bien si tus subárboles no son excesivamente anchos en comparación con el resto del gráfico:

> g <- barabasi.game(100, directed=F) > layout <- layout.reingold.tilford(g, circular=T) > plot(g, layout=layout)