2010-04-16 53 views
18

estoy a mitad de camino consulte la ediciónGraphviz DOT organizar nodos en círculos, diseño demasiado "compacta"

bien aquí es mi problema, yo estoy generando un gráfico de un módulo de Python, incluyendo todos los archivos con sus funciones/métodos/clases.

Quiero organizarlo de modo que los nodos se agrupen en círculos alrededor de sus nodos principales, actualmente todo está en una fila horizontal gigante, lo que hace que la cosa> 50k píxeles de ancho y también el convertidor svg falle (solo renderiza el la mitad del gráfico).

Pasé por el docs pero no pude encontrar nada que parezca hacer el truco.

Así que la pregunta es:
¿Hay una manera simple de hacer esto o tengo que diseñar todo yo solo? :/

EDIT:
Gracias al comentario de Andrews tengo el diseño correcto, el único problema ahora es que es un poco de "compacto" ... así que la pregunta ahora es, cómo solucionar este problema ?

Test

+4

¿Ha intentado utilizar la disposición "copado"? Puede dar un resultado como lo que quieres. – Andrew

+0

Acabo de probarlo a través del interruptor de línea de comando -K, funciona un poco ver mi edición. –

+3

Un poco tarde, pero cuando obtiene estos diseños superpuestos con neato solo establece "overlap = false". – pablasso

Respuesta

31

que he mencionado todos los parámetros más importantes que influyen en el diseño actual y los valores de los parámetros sugeridos. Aún así, sospecho que puede obtener el diseño que desea simplemente aplicando algunas de estas sugerencias.

  • reducir el peso borde, por ejemplo, [peso = 0.5]; Esto hará que los bordes sean más largos, haciendo que los conglomerados ajustados que ve actualmente en su gráfico se 'desplieguen'.

  • Deshacerse de los bordes del nodo, node_A [color = none; forma = texto claro]; especialmente para nodos de forma ovalada, una fracción sustancial del espacio del nodo 'no se utiliza' (es decir, no se utiliza para mostrar la etiqueta del nodo).

  • establecer explícitamente el tamaño de fuente para los nodos (las fronteras de nodo son ampliada de modo que rodean el texto nodo, lo que significa que la fuente tamaño y la cantidad de texto para un nodo dado tiene una efecto significativo en su tamaño ); [tamaño de fuente = 11] debe ser grande suficiente para ser legible pero también reducir la apariencia 'desordenada' (el tamaño predeterminado de es 14).

  • aumentar la separación mínima entre nodos, a través de 'nodesep'; por ejemplo, nodesep = 2.0; esto hará que responda directamente a su objeción con respecto a que su gráfico sea "demasiado compact." ('nodesep' y 'ranksep' probablemente afecten a cómo dibuja el gráfico más que cualquier otro parámetro para nodo, borde o gráfico.En su caso, parece que tiene solo dos rangos de nodos; 'Ranksep' establece el distancia mínima entre los nodos de diferentes filas - se ve como todos los nodos que comprenden el gráfico son de la mismo rango (a excepción de unos pocos nivel superior nodos en los centros).

  • establecer explícitamente tamaño total gráfico, por ejemplo, size = "7.75,10.25" (asegura que su gráfico cabe en una página de 8,5 x 11 y que ocupa todo el espacio)

  • Y una sugerencia puramente estética que como mucho solo ayudará a que su gráfico aparezca menos estorbado: el color de fuente predeterminado para ambos extremos y es negro. La mayoría de la tinta en el gráfico es de esos dos estructuras (sobre todo si eliminar las fronteras de nodos), de modo que lo haría por ejemplo bien fijar el fontcolor (texto) de nodo o la fontcolor borde a "azul" para ayudar a la vista distinguir los dos conjuntos de estructuras graph .

+1

De hecho, tuve un problema muy similar informado aquí y el uso de 'ranksep' fue la configuración clave para desplegar el gráfico. ¡Gracias! –

+0

¿Podría llevarme a la documentación de esto? Con muestras de código de trabajo? – aitchnyu

6

Si es demasiado compacto, querrá meterse con la longitud del borde. Usted tiene un par de opciones dependiendo del diseño gráfico:

  1. Si su diseño es SFDP o FDP, ajustar el gráfico propiedad K. El valor predeterminado es 0.3.
  2. Para neato (o fdp), ajustar la borde propiedad len. El valor predeterminado es 1.0 para neato y 0.3 para fdp.
  3. Para dot puede usar la propiedad edgeminlen que es la longitud de borde mínima. Por defecto es 1.

También puede ser que quiera meterse con la propiedad gráfico modelo que determina el comportamiento de la agrupación. Específicamente, pruebe subconjunto. Creo que esto se encarga len para usted: http://www.graphviz.org/doc/info/attrs.html#d:model

Además, puede eliminar las superposiciones todo junto con técnicas de escalamiento: http://www.graphviz.org/doc/info/attrs.html#d:overlap

+0

Hmm .. minlen parece que no funciona ... – Pacerier

Cuestiones relacionadas