Несколько графиков внутри файла Graphviz DOT

У меня есть этот график Graphviz DOT:

digraph unit_test {
    label="Unit test"
    
    edge [fillcolor="#a6cee3" color="#1f78b4"]

    node[shape="ellipse" style="filled" fillcolor="#1f77b4"]
        start
        end
    node[shape="box" style="filled" fillcolor="#ff7f0e"]
        process
        
    subgraph cluster_process {
        label = "Major logic"
        process
    }
    
    start -> process
    process -> end
    
}

Вышеупомянутое выглядит как:

Первый график

У меня есть второй график:

digraph details {
    label = "Process details"
    
    edge [fillcolor="#a6cee3" color="#1f78b4"]
    
    node[shape="ellipse" style="filled" fillcolor="#1f77b4"]
        start
        end
    node[shape="box" style="filled" fillcolor="#ff7f0e"]
        details
    
    subgraph cluster_details {
        label = "Details"
        details
    }
    
    start -> details
    details -> end
}

Что отображает:

Второй график

Проблема

Когда я помещаю два приведенных выше графика в один и тот же файл DOT с именем supporting.dot и запускаю команду dot -Tpng -o supporting.png supporting.dot, терминал распечатывает некоторую глупость, и файл выходного изображения не будет содержать оба графика, он просто содержит первый. Можно ли использовать несколько графиков в одном файле DOT? Если да, то что мне не хватает?

Вывод терминала


person user3405291    schedule 13.09.2020    source источник
comment
1) как выглядит ваш supporting.dot? Это просто вырезка и вставка или .... Сколько операторов диграфа у вас есть в supporting.dot? 2) Я не думаю, что точечный файл может содержать несколько диграфов.   -  person albert    schedule 13.09.2020


Ответы (3)


Вопрос неясен относительно того, что должно быть достигнуто, но, возможно, следующее является отправной точкой

digraph G{
subgraph unit_test {
    label="Unit test"
    
    edge [fillcolor="#a6cee3" color="#1f78b4"]

    node[shape="ellipse" style="filled" fillcolor="#1f77b4"]
        start
        end
    node[shape="box" style="filled" fillcolor="#ff7f0e"]
        process
        
    subgraph cluster_process {
        label = "Major logic"
        process
    }
    
    start -> process
    process -> end
    
}

subgraph details {
    label = "Process details"
    
    edge [fillcolor="#a6cee3" color="#1f78b4"]
    
    node[shape="ellipse" style="filled" fillcolor="#1f77b4"]
        start1 [label="start"]
        end1 [label="end"]
    node[shape="box" style="filled" fillcolor="#ff7f0e"]
        details
    
    subgraph cluster_details {
        label = "Details"
        details
    }
    
    start1 -> details
    details -> end1
}

}

Обратите внимание на наименования / метки во втором подграфе.

person albert    schedule 13.09.2020

Dot не может отобразить 2 графика в один файл, вывод, который вы видите, вероятно, является содержимым одного из графиков в формате png.

Чтобы предотвратить это, вы можете сначала запустить свои графики через gvpack - что-нибудь похожий на:

gvpack -u supporting.dot | dot -Tpng -o supporting.png

Это объединяет все графики в supporting.dot в один график, который затем отображается с помощью dot.

На компоновку графиков могут повлиять еще несколько опций gvpack.

person marapet    schedule 13.09.2020
comment
Извините, я хотел бы принять более одного ответа. В конце концов я пошел на многократный subgraph подход. Но ваше решение / объяснение тоже прекрасно. - person user3405291; 13.09.2020

Допустимо иметь несколько графиков, определенных в одном входном файле. Затем вы можете создать несколько выходных файлов с помощью параметра -O, например:

dot -Tpng -O multi.gv

В результате будут созданы multi.gv.png и multi.gv.2.png

person sroush    schedule 13.09.2020