2011-03-17 22 views
12

Tengo una función print_dot() que emite punto en stdout. De esa manera puedo hacer:¿Cómo dibujar múltiples gráficos con punto?

$ ./myprogram < input | dot -T x11 

Funciona muy bien cuando intento imprimir un gráfico.

Ahora cuando imprimo varios gráficos, no aparece nada. La ventana de puntos está en blanco, X11 y dot toman toda la CPU. Nada está impreso en stderr.

$ echo -e "graph { a -- b }" | dot -T x11 # work 
$ echo -e "graph { a -- b } \n graph { c --d }" | dot -T x11 # doesn't work 

# it seems to be interpreted nonetheless 
$ echo -e "graph { a -- b } \n graph { c -- d } " | dot -T xdot 
graph { 
    ... 
} 
graph { 
    ... 
} 

Además, cuando quito los \n entre las 2 gráficas, solamente se interpreta el primer gráfico (lo que es una buena característica ...):

$ echo -e "graph { a -- b } graph { c -- d } " | dot -T xdot 
graph { 
    ... 
} 

tubería de la salida xdot poner los puntos más doesn arregla el problema

Entonces, ¿cómo se representan múltiples gráficos con graphviz?

Respuesta

4

Script simple que lee gráficos en stdin y abre varias instancias de puntos.

#!/usr/bin/perl 

my $o; 
my @l; 


while(<>) { 
    if(/^\s*(di)?graph/) { 
     push @l, $o; 
     $o = ''; 
    } 

    $o .= $_; 
} 

if($o =~ /graph/) { 
    push @l, $o; 
} 

for(@l) { 
    if(fork() == 0) { 
     open my $p, '| dot -T x11' or die $!; 
     print $p $_; 
     close $p; 
     exit 0;   
    } 
} 
7

Se llama a dot varias veces. O uno pone todo en un solo gráfico, teniendo cuidado de evitar la duplicación de nombres.

+3

3 horas siguieron. Estupendo. – knarf

0

Uso gvpack

$ echo -e "graph { a -- b }\ngraph { c -- d }" | gvpack -u | dot -Tpng > graphs.png 

Resultado

enter image description here

Cuestiones relacionadas