Как нарисовать несколько графиков с точкой? - PullRequest
13 голосов
/ 17 марта 2011

У меня есть функция print_dot(), которая выводит точку на стандартный вывод. Таким образом, я могу сделать:

$ ./myprogram < input | dot -T x11

Это прекрасно работает, когда я пытаюсь напечатать один график.

Теперь, когда я печатаю несколько графиков, ничего не появляется. Окно точек пустое, X11 и точка занимают весь процессор. На 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?

Ответы [ 3 ]

8 голосов
/ 17 марта 2011

Один звонок dot несколько раз.Или можно поместить все в один граф, стараясь избежать дублирования имен.

4 голосов
/ 24 марта 2011

Простой скрипт, который читает графики в 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;        
    }
}
2 голосов
/ 23 февраля 2018

Использование gvpack

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

Результат

enter image description here

...