2010-08-06 12 views
58

Qualcuno ha suggerimenti generali per ridurre le dimensioni di un grafico generato da graphviz (dimensioni come in area, non come nella dimensione del file).Ridurre la dimensione (come nell'area) del grafico generato da graphviz

Ho un grafico abbastanza grande (700 nodi). Ho impostato una dimensione del carattere più piccola per ogni nodo, ma sembra ridurre solo la dimensione del carattere e non la dimensione effettiva del nodo. Ci sono degli attributi per ridurre anche la quantità totale di spazi vuoti nel grafico? Grazie!

+0

Questo http://stackoverflow.com/questions/1286813/how-do-i-set-the-resolution-when-converting-dot-files-graphviz-to-images/3918019#3918019 risposta è circa il più elegante e meno lavoro implementare. – Forbesmyester

+0

@Forbesmyester no - la risposta a cui si fa il link è in sommario "per rendere il grafico più piccolo," indietro "- bene, che funziona probabilmente per il rendering di qualsiasi immagine digitale.GraphViz è un motore di layout grafico, quindi, una risposta utile alle domande sulla riduzione della dimensione del grafico sono indirizzate in modo più utile al layout del grafico stesso, perché questa è l'essenza di ciò che GraphViz fa, ovvero i grafici di layout. Inoltre, la soluzione "zoom out" non si rivolge ad esempio a vaste aree di white-space o sparsity, ma di fatto le tecniche per un layout migliore. – doug

risposta

90

Nella mia esperienza di utilizzo di graphviz per il rendering di grafici di tale dimensione (~ 700 nodi), minima correzione per tentativi ed errori a questa combinazione di impostazioni di attributo - alcune strutturali, alcune puramente estetiche - per tutti e tre gli oggetti (grafico , nodi e bordi) dovrebbe fare ciò che si desidera:

ridurre la separazione minima tra i nodi, tramite 'nodesep'; ad es., nodi [nodesep = 0.75]; questo renderà il tuo grafico "troppo compatto". (nodesep e ranksep probabilmente influenzano il modo dot disegna un grafico più di ogni altro parametro regolabile)

ridurre la distanza minima tra i nodi di varie classi, per esempio, nodi [ranksep = 0,75]; 'Ranksep' imposta la distanza minima tra i nodi di varie classi - questo influenzerà il layout grafico in modo significativo se il grafico è composto da molti ranghi

aumento i pesi bordo, ad esempio, edge [peso = 1,2] ; questo renderà i bordi più corti, a sua volta, rendendo l'intero grafico più compatta

bordi nodo rimuovi e nodo riempire, ad esempio, nodi [color = nessuna; shape = plaintext], in particolare per i nodi di forma ovale, una frazione sostanziale dello spazio totale del nodo è "inutilizzata" (cioè, non utilizzata per visualizzare l'etichetta del nodo); impronta di ciascun nodo è ormai ridotto a solo il testo

esplicitamente impostare la dimensione dei nodi caratteri (confini nodi vengono ingrandite in modo che circondano il testo del nodo, il che significa che la dimensione del carattere e la quantità di testo per un dato nodo ha un effetto significativo sulla sua dimensione); [Fontsize = 11] deve essere abbastanza grande da essere leggibile ma anche ridurre la comparsa 'disordinato' (la dimensione predefinita è 14) colori diversi

uso per i nodi e spigoli --Questo renderà il grafico più facile da leggere ; ad esempio, imposta il nodo "testo" fontcolor su blu e il bordo fontcolor su "grigio" per aiutare l'occhio a distinguere le due serie di strutture del grafico. Questo farà una differenza più grande di quanto tu possa pensare.

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

+0

Grazie per la risposta dettagliata. L'unico problema che ho è che l'impostazione della dimensione del carattere non sembra ridurre la dimensione complessiva del nodo per esso. Sembra che l'unica cosa che diventa più piccola sia il font. – garsh0p

+0

nessun problema. Per quanto riguarda 'fontsize', se hai rimosso i bordi del nodo e il nodo fill * prima *, in modo che la rappresentazione di ogni nodo sia solo il testo del nodo, la riduzione della dimensione del testo è esattamente ciò che desideri, perché riduce il nodo 'apparente' dimensione. (Certo, rimuovere i bordi del nodo/riempimento non sempre migliora la 'risoluzione' globale - dipende solo dal tuo grafico, ma lo saprai non appena lo proverai). – doug

+0

I suggerimenti sopra riportati sono ottimi e forniscono molto più potere di quello che faccio ... 'cat [something.dot] | dot-Gdpi = 64 -Tpng: cairo: cairo> [outfile.png] 'che ridimensiona il grafico ... – Forbesmyester