GraphViz DOT有向图 - 复杂案例分析(2)

281 阅读1分钟

目录

正常写法

digraph startgame {
    node [fontname="SimHei"];  // 设置节点属性,这里设置字体为黑体
    n1[label="TCP Socket" shape=box];
    n2[label="Data" shape=diamond];
    n3[label="h2\nParse Data" shape=ellipse];
    n4[label="h2\nEvents" shape=diamond];
    n5[label="gethy\nUpdate\nBuffers" shape=ellipse];
    n6[label="gethy\nUParse\nBuffers" shape=ellipse];
    n7[label="gethy\nEvents" shape=diamond];
    n8[label="External\nHandlers" shape=box];

    rankdir=TB; 
    {rank=same; n1;n2;n3;n4;}
    {rank=same; n5;n6;n7;n8;}
    
    n1->n2->n3->n4;
    //  正常写法
    n5->n6->n7->n8[dir="back"];
    //  调整后的写法
    // n8->n7->n6->n5[dir="back"];
    n4->n5;
}

在这里插入图片描述
正常写法根据案例写法做调整
在这里插入图片描述

案例写法

digraph startgame {
    node [fontname="SimHei"];  // 设置节点属性,这里设置字体为黑体
    n1[label="TCP Socket" shape=box];
    n2[label="Data" shape=diamond];
    n3[label="h2\nParse Data" shape=ellipse];
    n4[label="h2\nEvents" shape=diamond];
    n5[label="gethy\nUpdate\nBuffers" shape=ellipse];
    n6[label="gethy\nUParse\nBuffers" shape=ellipse];
    n7[label="gethy\nEvents" shape=diamond];
    n8[label="External\nHandlers" shape=box];

    rankdir=TB;    
    {
        rank=same;
        n1 -> n2 [arrowhead="none"];
        n2 -> n3;
        n3 -> n4 [arrowhead="none"];
    }
    {        
        rank=same;
        n8 -> n7[dir="back"];
        n7 -> n6[arrowhead="none"];
        n6 -> n5[dir="back"];
    }    
    n4 -> n5;
}

在这里插入图片描述

案例分析

  • rankdir=TB;的情况下, rank=same节点是从左到右排列
  • 节点n4->n5,所以n4和n5会在同一竖线上。

根据分析创造一个蛇形节点

digraph startgame {
    {rank=same; a->b->c->d;}
    {rank=same; h->g->f->e[dir="back"]}
    d->e;
    {rank=same; i->j->k->l;}
    {rank=same; p->o->n->m[dir="back"];}
    l->m;
    h->i;
}

在这里插入图片描述