2011-03-17 98 views
12

我有一个print_dot()函数,它在stdout上输出点。 这样,我可以这样做:如何用点绘制多个图形?

$ ./myprogram < input | dot -T x11 

它的伟大工程,当我尝试打印一个图表。

现在当我打印几张图时,什么也没有显示出来。点窗口是空白的,X11和点取所有的CPU。没有什么打印在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 { 
    ... 
} 

此外,当我删除\n之间的2幅图,只有第一个图形解释(什么一个不错的功能...):

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

管道将XDOT输出再次没有按点不解决问题。

那么,如何使用graphviz呈现多个图?

回答

4

简单脚本,读取stdin上的图形并打开多个点实例。

#!/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

多次拨打dot。或者将所有内容放在一张图中,注意避免重复名称。

+3

3小时浪费。大。 – knarf 2011-03-17 17:35:29

0

使用gvpack

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

结果

enter image description here