14

我有一个print_dot()在标准输出上输出点的函数。这样我可以做到:

$ ./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 {
    ...
}

此外,当我删除\n2 个图之间的时,只解释第一个图(多么好的功能......):

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

再次将 xdot 输出连接到 dot 并不能解决问题。

那么,如何使用 graphviz 渲染多个图形呢?

4

3 回答 3

8

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

于 2011-03-17T17:21:00.103 回答
6

利用gvpack

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

结果

在此处输入图像描述

于 2018-02-23T12:20:08.247 回答
4

读取标准输入上的图形并打开多个点实例的简单脚本。

#!/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;        
    }
}
于 2011-03-24T18:47:42.267 回答