2011-11-19 11 views
8

Necesita dibujar un gráfico complejo donde habrá 3 tipos de bordes y varios tipos de nodos predefinidos.graphviz que define más "valores predeterminados"

Es posible definir un poco más (por ejemplo, no solo uno predeterminado) "tipo de borde" (o tipo de nodo) para el uso posterior?

significar algo así como:

edge [colorscheme=paired12, color=8, fontsize=11, fontname="Arial narrow"]; 
edge2 [colorscheme=paired12, color=3, fontsize=11, fontname="Arial narrow", style=bold]; 
edge3 [colorscheme=paired12, color=5, fontsize=14, fontname="Arial narrow"]; 

node1 -> node2; /* will use the default edge definition from the above */ 
node2 -> node3 [edgetype=edge2]; /* will use the second edge definition */ 
node2 -> node4 [edgetype=edge3]; /* and so on... */ 

Lo anterior, OFC, no es correcto - sólo para la explicación ...

Respuesta

7

Usando gvpr es simple, si usted averiguar lo básico:

input.dot

digraph test { 
    node1 -> node2[label="test 1"]; /* will use the default edge definition from the above */ 
    node2 -> node3 [label="test 2", edgetype="edge2"]; /* will use the second edge definition */ 
    node2 -> node4 [label="test 3", edgetype="edge3"]; /* and so on... */ 
} 

filter.gvpr

E { 
    color="red"; 
    fontsize=11; 
    fontname="Arial narrow" 
} 
E[edgetype == "edge2"] { 
    color="green"; 
    fontsize=11; 
    fontname="Arial narrow"; 
    style="bold" 
} 
E[edgetype == "edge3"] { 
    color="blue"; 
    fontsize=14; 
    fontname="Arial narrow" 
} 

Con el comando

gvpr -c -f filter.gvpr -o output.dot input.dot

producirá el archivo output.dot:

digraph test { 
    node1 -> node2 [color=red, 
     fontname="Arial narrow", 
     fontsize=11, 
     label="test 1"]; 
    node2 -> node3 [color=green, 
     edgetype=edge2, 
     fontname="Arial narrow", 
     fontsize=11, 
     label="test 2", 
     style=bold]; 
    node2 -> node4 [color=blue, 
     edgetype=edge3, 
     fontname="Arial narrow", 
     fontsize=14, 
     label="test 3"]; 
} 
+1

wow! ¡Eso es genial! Gracias. ;) – jm666

+1

De nada, consulte https://github.com/ellson/graphviz/tree/master/cmd/gvpr/lib, para obtener más ejemplos (complejos) de lo que puede hacer con 'gvpr'. – nepda

4

No, eso no es posible.

A menudo agrupo las definiciones de los bordes por su tipo, y redefino el valor predeterminado antes de cada grupo. Por ejemplo:

// type 1 edges 
edge [colorscheme=paired12, color=8, fontsize=11, fontname="Arial narrow"]; 
n1 -> n2; 
n3 -> n4; 
... 

// type 2 edges 
edge [colorscheme=paired12, color=3, fontsize=11, fontname="Arial narrow", style=bold]; 
n10 -> n11; 
... 

// type 3 edges 
edge [colorscheme=paired12, color=5, fontsize=14, fontname="Arial narrow"]; 
... 

Otra - más complicada - posibilidad sería utilizar una herramienta como gvpr que le permite manipular un gráfico, y añadir los atributos de borde en ese momento.

+0

Gracias, idea de redefinir ordenada y la agrupación de los bordes ... – jm666

Cuestiones relacionadas