2010-04-16 11 views
18

Sono a metà strada si prega di vedere la modificaGraphviz DOT organizzare nodi nei circoli, il layout troppo "compatto"

OK ecco il mio problema, sto generando un grafico di un modulo Python, inclusi tutti i file con le loro funzioni/metodi/classi.

Voglio sistemarlo in modo che i nodi si raccolgano in circolo attorno ai loro nodi genitori, attualmente tutto è su una fila orizzontale gigantesca, il che rende la cosa> 50k pixel di larghezza e anche il convertitore svg fallisce (restituisce solo il metà del grafico).

Ho passato il docs ma non ho trovato nulla che sembra fare il trucco.

Quindi la domanda è:
C'è un modo semplice per farlo o devo eseguire il layout di tutto da solo? :/

EDIT:
Grazie alla Andrews commento ho il layout di destra, l'unico problema ora è che è un po 'a "compact" ... così la domanda ora è, come risolvere questo problema ?

Test

+4

Hai provato utilizzando il layout "Neato"? Potrebbe dare un risultato come quello che vuoi. – Andrew

+0

Ho appena provato tramite l'interruttore della riga di comando -K, un pò funziona funziona vedere la mia modifica. –

+3

Un po 'tardi, ma quando ottieni questi layout sovrapposti con neato, imposta "overlap = false". – pablasso

risposta

31

ho accennato tutti i parametri più significativi che influenzano il layout corrente e quindi valori di tali parametri suggeriti. Tuttavia, ho il sospetto che tu possa ottenere il layout che desideri semplicemente applicando un paio di questi suggerimenti.

  • ridurre il peso bordo, ad esempio, [peso = 0,5]; ciò renderà i bordi dello più lunghi, causando i cluster corretti che si vedono attualmente nel grafico in "ventaglio".

  • eliminare i bordi del nodo, node_A [colore = nessuno; Forma = crittografato]; , in particolare per i nodi di forma ovale, una frazione significativa dello spazio dei nodi è "inutilizzata" (ovvero non viene utilizzato per visualizzare l'etichetta del nodo).

  • impostare esplicitamente la dimensione del carattere per i nodi (i bordi di nodo sono allargata in modo che circondano il testo nodo, il che significa che il font dimensioni e la quantità di testo per un dato nodo comprende una effetto significativo sulla sua dimensione ); [fontsize = 11] dovrebbe essere grande sufficiente per essere leggibile, ma anche ridurre l'aspetto 'ingombro' (la dimensione predefinita di è 14).

  • aumentare la separazione minima tra i nodi , tramite 'nodesep'; ad esempio, nodesep = 2.0; questo sarà indirizzo direttamente la tua obiezione per quanto riguarda il tuo grafico "troppo compatto." ('nodesep' e 'ranksep' probabilmente influenzano il modo in cui il punto disegna un grafico più di qualsiasi altro parametro per il nodo, il bordo o il grafico .Nel tuo caso, sembra che tu abbia solo due ranghi di nodi; 'Ranksep' imposta la distanza minima tra i nodi di diversi ranghi - sembra che tutti i nodi che compongono il grafico sono dello stesso valore (tranne che per poche livello superiore nodi nei centri).

  • esplicitamente impostare formato grafico totale, ad esempio, size = "7.75,10.25" (assicura che il grafico si inserisce in una pagina 8,5 x 11 e che occupa l'intero spazio)

  • E un suggerimento puramente estetico che al massimo aiuterà solo il tuo apparire meno ingombrante: il fontcolor predefinito per entrambi i bordi e i nodi è nero. La maggior parte della macchia sul grafico è da questi due strutture (in particolare se si rimuovere i bordi dei nodi), quindi vorrei per esempio impostare il nodo (testo) fontcolor o fontcolor bordo di "blu" per aiutare l'occhio distinguere le due serie di strutture di grafico .

+1

In effetti, ho avuto un problema molto simile riportato qui e l'uso di 'ranksep' è stata la configurazione chiave per far risaltare il grafico. Grazie! –

+0

Potresti guidarmi alla documentazione di questo? Con esempi di codice funzionante? – aitchnyu

6

Se è troppo compatto, vorrai rovinare la lunghezza del bordo. Hai un paio di opzioni a seconda del layout grafico:

  1. Se il layout è SFDP o FDP, modificare il grafo proprietà K. Il valore predefinito è 0.3.
  2. Per neato (o fdp), modificare il bordo proprietà len. L'impostazione predefinita è 1.0 per neato e 0.3 per fdp.
  3. Per il punto è possibile utilizzare il bordo proprietà minlen che è la lunghezza minima del bordo. L'impostazione predefinita è 1.

Si potrebbe anche voler fare confusione con la proprietà del grafico modello che determina il comportamento di clustering. In particolare, prova sottoinsieme. Credo che questo si occupa len per voi: http://www.graphviz.org/doc/info/attrs.html#d:model

Inoltre, è possibile eliminare le sovrapposizioni tutti insieme con le tecniche di scaling: http://www.graphviz.org/doc/info/attrs.html#d:overlap

+0

Hmm .. minlen non sembra funzionare .... – Pacerier

Problemi correlati