2012-06-28 15 views
5

He encontrado este answer realmente útil. Me ayuda a trazar redes/gráficos y seleccionar las coordenadas para los nodos en la trama.igraph coordenadas de nodo fijo diseño

Sin embargo, el diseño vuelve a escalar las coordenadas a -1 a 1. En primer lugar, traté de averiguar cómo lo hace, pero no pude. ¿Hace algo como esto?

(coordinate - mean(coordinates))/(coordinate + mean(coordinates) 

¿En segundo lugar hay una manera de mantener las coordenadas originales? Me gustaría tener las hachas de plat con el gráfico y preferiría no tener que reescalar todo.

Respuesta

9

La respuesta a su primera pregunta se encuentra en el código fuente de la función plot.igraph; escriba plot.igraph en el prompt R para obtener el código fuente completo. Hay una parte en la que no dice:

layout <- layout.norm(layout, -1, 1, -1, 1) 

layout.norm es otra función de igraph el que hace la magia para usted; escriba layout.norm para ver cómo funciona.

Ahora, la respuesta a la segunda pregunta es realmente simple; simplemente pase rescale=F a los argumentos de plot, que hace que igraph salte toda la rama en plot.igraph donde se llama layout.norm, por lo que funcionará con sus coordenadas originales. A continuación, puede usar xlim y ylim como de costumbre para establecer los límites de los ejes X e Y.

+1

Gracias por su ayuda, verifique la fuente ahora. Los límites de los ejes parecen estar unidos, es decir, 'ylim = c (0,6)' también hace que el rango 'xlim' sea 6. lo cual es molesto, pero este es un salto adelante, gracias de nuevo. – user1320502

+2

@ user1320502: configure 'asp = FALSE' para evitar la relación de aspecto predeterminada 1: 1. –

+0

¿Por qué no sale nada cuando configuro 'rescale = FALSE'? – pengchy

0
set.seed(111) 
    ig <- graph_from_data_frame(as.data.frame(matrix(sample(letters,40,rep=TRUE),nc=2))) 
    set.seed(123) 
    ig.layout <- layout.fruchterman.reingold(ig) 
    rownames(ig.layout) <- V(ig)$name 
    par(bg="white",mar=c(0,0,0,0),oma=c(0,0,0,0)) 
    plot.igraph(ig,layout=ig.layout,vertex.color=adjustcolor("gray",alpha.f=0.5),rescale=FALSE,xlim=c(4,11),ylim=c(4,11)) 
    set.seed(321) 
    ig.sub <- subgraph(ig,sample(V(ig)$name,5)) 
    plot.igraph(ig.sub,layout=ig.layout[V(ig.sub)$name,],add=TRUE,vertex.color=adjustcolor("orange",alpha.f=0.5),rescale=FALSE) 

este código muestra el gráfico, donde el nodo naranja se agrega más tarde.

enter image description here

Cuestiones relacionadas