2015-08-14 22 views
9

Supponiamo che io voglio fare un complotto con i seguenti dati:cambiare la spaziatura tra i vertici in IGRAPH in R

pairs <- c(1, 2, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 4, 
      14, 4, 15, 6, 13, 6, 19, 6, 28, 6, 36, 7, 16, 7, 23, 7, 26, 7, 33, 
      7, 39, 7, 43, 8, 35, 8, 40, 9, 21, 9, 22, 9, 25, 9, 27, 9, 33, 9, 
      38, 10, 12, 10, 18, 10, 20, 10, 32, 10, 34, 10, 37, 10, 44, 10, 45, 
      10, 46, 11, 17, 11, 24, 11, 29, 11, 30, 11, 31, 11, 33, 11, 41, 11, 
      42, 11, 47, 14, 50, 14, 52, 14, 54, 14, 55, 14, 56, 14, 57, 14, 58, 
      14, 59, 14, 60, 14, 61, 15, 48, 15, 49, 15, 51, 15, 53, 15, 62, 15, 
      63) 

g <- graph(pairs) 
plot(g,layout = layout.reingold.tilford) 

ricevo una trama come quella qui sotto:

enter image description here

Come puoi vedere gli spazi tra alcuni dei vertici sono così piccoli che questi vertici si sovrappongono.

1. Mi chiedo se esiste un modo per modificare la spaziatura tra i vertici.

2. Inoltre, la spaziatura tra i vertici è arbitraria? Ad esempio, i Vertici 3, 4 e 5 sono molto vicini tra loro, ma 5 e 6 sono distanti tra loro.

EDIT:

Per la mia seconda domanda, credo che la spaziatura dipende dal numero di nodi al di sotto. Ad esempio, 10 e 11 sono più distanti tra loro di 8 e 9 perché ci sono più bambini sotto i 10 e 11 rispetto a quelli inferiori a 8 e 9.

+0

Rende la trama più grande ei vertici più piccoli. –

risposta

3

Scommetto che c'è una soluzione migliore ma non riesco a trovarla. Ecco il mio approccio. Poiché sembra che manchi un parametro generale per la larghezza, è necessario regolare i parametri manualmente per ottenere l'output desiderato.

Il mio approccio è principalmente quello di ridimensionare alcuni elementi della trama al fine di renderli della giusta dimensione, regolare i margini al fine di ottimizzare lo spazio il più possibile. Il parametro più importante qui è il parametro asp che controlla le proporzioni del grafico (dal momento che in questo caso il grafico è meglio lungo che alto, un rapporto aspetto di meno di 0,5 è giusto). Altri trucchi sono per diminuire la dimensione del vertice e dei caratteri. Ecco il codice:

plot(g, layout = layout.reingold.tilford, 
     edge.width = 1, 
     edge.arrow.width = 0.3, 
     vertex.size = 5, 
     edge.arrow.size = 0.5, 
     vertex.size2 = 3, 
     vertex.label.cex = 1, 
     asp = 0.35, 
     margin = -0.1) 

che produce questa trama: enter image description here

un altro approccio potrebbe essere quello di impostare i dispositivi grafici in formato PDF (o JPEG, ecc) e quindi impostare la rescale a FALSE. Con il visualizzatore Rstudio questo taglia un enorme pezzo di dati ma con altri dispositivi grafici lo potrebbe non funzionare correttamente (non garantito).

In ogni caso per ogni dubbio su come utilizzare questi parametri (che sono molto difficile a volte) di tipo help(igraph.plotting)

Per la seconda parte della domanda non sono sicuro ma guardando all'interno della funzione che non riesco a capire una risposta precisa ma suppongo che lo spazio tra elementi sullo stesso livello sia calcolato sugli elementi figli che hanno, per esempio 3,4,5 devono essere più vicini perché hanno figli e sub-figli e quindi richiedono più spazio.