2010-06-27 10 views
21

Mam wykres, który chcę grafviz do układu i wizualizacji dla mnie. Wykres ma 122 krawędzie i 123 węzły. Krawędzie są 4 różnych rodzajów i chcę, aby były wizualnie rozróżnialne. Jednak jeszcze nie zdecydowałem, jaki byłby najlepszy sposób na to, chciałbym trochę pograć z tarczami. Niestety nie widzę nic takiego jak atrybut "klasa" lub "arkusz stylów" dla krawędzi. Mogę ustawić atrybuty wizualne tylko dla każdej krawędzi (wiele powtórzeń). Może coś przeoczyłem? Czy może istnieje jakiś sposób dodania krawędzi do 4 różnych grup, a następnie stylizowania grup, a nie każdej krawędzi indywidualnie?Graphviz: jak przypisać ten sam styl do grupy krawędzi?

Odpowiedz

30

do stylizacji krawędzie (lub węzłów) przez grupę zamiast pojedynczo użyciu podgrafu.

tak:

digraph G { 

node [style=filled,color="#5D8AA8", fillcolor="#5D8AA8"]; 

subgraph c1 { 
    edge [color="#004225", arrowsize="0.6", penwidth="1"]; 
    "node 1" -> "node 3"; 
    "node 5" -> "node 7"; 
    "node 1" -> "node 2"; 
    label = ""; 
} 

subgraph c2 { 
    edge [color="#FBEC5D", arrowsize="1.2", penwidth="3"]; 
    "node 2" -> "node 4"; 
    "node 4" -> "node 6"; 
    "node 3" -> "node 5"; 
    "node 6" -> "node 8"; 
    label = ""; 

} 

begin -> "node 1"; 
start -> "node 2"; 
"node 1" -> "node 4" 
"node 2" -> "node 6"; 

start [shape=diamond];} 

jeśli umieścić powyższy kod w pliku w/".dot" rozszerzenia Tak; następnie wyrenderuj go w graphviz, zobaczysz trzy różne typy krawędzi, w zależności od wyglądu.

Jeden typ jest po prostu domyślny (kolor = czarny, grubość = 1 itd.) - tj. Krawędzie te nie są przypisane do podgraphu.

Pozostałe dwa typy krawędzi (cienka, ciemnozielona grupa i gruba, jasnożółta grupa) są stylizowane na podstawie przypisania do jednego z dwóch klastrów podgrafów.

podgrafu często wykorzystana do podświetlenia klastra węzła (to znaczy, na oznaczanie konkretnego ciągły „grupa” węzłów z pozostałych węzłów na wykresie); jednak nie ma wymogu (jak widać na moim przykładzie), że krawędzie wybrane do przypisania przez przypisanie do danego podgraphu, należą do ciągłej "grupy" węzłów - możesz wyznaczyć krawędzie, które chcesz przypisać do dana sub-wykres).

mi węzły stylizacji autorstwa grupy jest analogiczna do praktyki HTML określające klasę i przypisanie go do kolekcji div w znacznikach HTML

+0

Jak możemy ustawić domyślny styl dla subgraphs? – Pacerier

+1

Nie ma potrzeby tworzenia podgraphów. Wszystkie krawędzie zdefiniowane poniżej deklaracji stylu krawędzi z "edge [color = ... etc]" będą używać tego stylu. – Bousch

12

Podczas @ odpowiedź Douga jest prawidłowe (używać subgraphs przypisać podobny styl do grupy obiektów), uważam, że mój przykład jest lepsze:

digraph G {                  
    compound=true; 
    subgraph columns { 
    c0r0 -> c0r1; 
    c0r1 -> c0r2; 
    c1r0 -> c1r1; 
    c1r1 -> c1r2; 
    c2r0 -> c2r1; 
    c2r1 -> c2r2; 
    } 
    subgraph rows { 
    edge [color=red, constraint=false]; 
    c0r0 -> c1r0; 
    c1r0 -> c2r0; 
    c0r1 -> c1r1; 
    c1r1 -> c2r1; 
    c0r2 -> c1r2; 
    c1r2 -> c2r2; 
    } 
} 


cat square-digraph.dot | dot -Tsvg -o square-digraph.svg 

the resulting graph

+1

Idealny, po prostu idealny. – Pacerier

+1

Dlaczego jest lepiej? Nie znaczy krytykować cię. Nie znam się na graphviz, żeby zrozumieć, jak jest lepiej i chciałbym się dowiedzieć. –

+0

Po prostu podoba mi się wynikowy diagram. Zasada rozwiązania nie jest inna. – bukzor