2010-08-06 13 views
58

Hat jemand irgendwelche allgemeine Tipps zum Reduzieren der Größe eines Diagramms von graphviz (Größe wie im Bereich, nicht wie in der Dateigröße) generiert.Reduzieren der Größe (wie im Bereich) des Diagramms erstellt von graphviz

Ich habe eine ziemlich große Grafik (700 Knoten). Ich setze für jeden Knoten eine kleinere Schriftgröße, aber es scheint nur die Schriftgröße und nicht die tatsächliche Knotengröße zu reduzieren. Gibt es irgendwelche Attribute, um die Gesamtmenge an Leerraum in der Grafik zu reduzieren? Vielen Dank!

+0

Diese http://stackoverflow.com/questions/1286813/how-doi-i-set-the-resolution-when-converting-dot-files-graphviz-to-images/3918019#3918019 Antwort ist über die eleganteste und am wenigsten Arbeit implementieren. – Forbesmyester

+0

@Forbesmyester nein - die Antwort, die Sie verlinken, ist zusammengefasst "um den Graphen kleiner zu machen," verkleinern "- gut, das funktioniert wahrscheinlich für das Rendern jedes digitalen Bildes.GraphViz ist eine Graphlayout-Engine, daher ist eine nützliche Antwort auf Fragen zum Reduzieren der Graphengröße am nützlichsten auf das Layout des Graphen selbst gerichtet, da dies die Essenz von dem ist, was GraphViz macht, nämlich Layoutgraphen. Die "Zoom Out" -Lösung adressiert z. B. nicht große Bereiche von Leerraum oder Leerstellen, aber Techniken für ein besseres Layout tun dies tatsächlich. – doug

Antwort

90

Nach meiner Erfahrung mit graphviz zu Grafiken dieser Größe (~ 700 Knoten), minimale Versuch-und-Fehler-Anpassung an diese Kombination von Attributeinstellungen - einige strukturelle, einige rein ästhetische - für alle drei Objekte (Grafik , Knoten und Kanten) sollte tun, was Sie wollen:

reduzieren Sie die minimale Trennung zwischen den Knoten, über 'nodesep'; z.B. Knoten [nodesep = 0,75]; Dadurch wird Ihr Diagramm "zu kompakt". (nodesep und ranksep wahrscheinlich beeinflussen, wie Punkt ein Diagramm mehr als jeder andere einstellbare Parameter zieht)

reduzieren den Mindestabstand zwischen Knoten unterschiedlicher Reihen, z.B. Knoten [ranksep = 0,75]; ‚Ranksep‘ legt den Mindestabstand zwischen Knoten unterschiedlicher Reihen - dies Ihr Graph Layout erheblich beeinflussen wird, wenn Ihr Diagramm von vielen Reihen

Erhöhung der Kantengewichte besteht, zB Rand [Gewicht = 1,2] ; dadurch werden die Kanten kürzer, wodurch der gesamte Graph kompakter wird.

Entfernen von Knotenrändern und Knotenfüllung, z. B. Knoten [color = none; shape = Klartext], insbesondere für ovalförmige Knoten ist ein wesentlicher Teil des gesamten Knotenraums "unbenutzt" (dh wird nicht verwendet, um die Knotenbezeichnung anzuzeigen); Der Footprint jedes Knotens ist nun auf seinen Text reduziert

explizit die Schriftgröße für die Knoten (die Nodes Grenzen sind so vergrößert, dass sie den Knoten Text umgeben, was bedeutet, dass die Schriftgröße und die Menge an Text für eine gegebener Knoten hat eine signifikante Auswirkung auf seine Größe); [Schriftgröße = 11] sollte groß genug sein, lesbar zu sein aber auch die ‚überladen‘ Aussehen reduzieren (die Standardgröße ist 14)

Verwendung verschiedener Farben für Knoten und Kanten --Dieser wird Ihr Diagramm leichter lesbar machen ; B. die Schriftfarbe "text" des Knotens "font" auf "blau" und die Schriftfarbe "edge" auf "gray" setzen, um dem Auge zu helfen, die beiden Gruppen von Graphenstrukturen zu unterscheiden. Dies wird einen größeren Unterschied machen, als Sie vielleicht denken.

explizit Gesamtdiagrammgröße, zB graph [size = "7.75,10.25"] (stellt sicher, dass Ihre Grafik auf einer Seite 8,5 x 11 passt und dass es den gesamten Raum einnimmt) gesetzt

+0

Danke für die ausführliche Antwort. Das einzige Problem, das ich habe, ist, dass das Einstellen der Schriftgröße die Gesamtgröße des Knotens nicht zu reduzieren scheint. Es scheint, als ob das einzige, was kleiner wird, die Schrift ist. – garsh0p

+0

kein Problem. Wenn Sie fontsize entfernen und die Knotenränder und den Knoten mit * first * ausfüllen, so dass die Darstellung jedes Knotens nur der Knotentext ist, dann ist das Reduzieren der Textgröße genau das, was Sie wollen, weil es den "scheinbaren" Knoten reduziert Größe. (Zugegeben, das Entfernen der Knotengrenzen/Füllung verbessert nicht immer die gesamte 'Auflösung' - hängt nur von Ihrem Diagramm ab, aber Sie werden es wissen, sobald Sie es versuchen). – doug

+0

Die obigen Vorschläge sind großartig und bieten viel mehr Power als das, was ich tue ... 'cat [something.dot] | dot-Gdpi = 64 -Typ: cairo: cairo> [outfile.png] 'das skaliert den Graphen einfach ... – Forbesmyester