【问题标题】:How do I force nodes to be drawn next to each other with Graphviz dot?如何使用 Graphviz dot 强制节点彼此相邻绘制?
【发布时间】:2020-11-11 02:08:45
【问题描述】:

我希望连续有一系列节点,并由一条边连接。当图形的rankdir 设置为TBBT 时,这可以正常工作,但是当我将其设置为LRRL 时,它会重新排列节点,因此它们不再彼此相邻。包括示例图像。

我已将我的代码剥离到最低限度以进行演示。除了第 2 行(指定rankdir)之外,以下两个图表的代码都是相同的:

digraph{
    rankdir=LR;
    node[shape=box,fontcolor=white,color=black,fillcolor=black,style=filled];
    edge[dir=none,color=black];
    
    Josh -> JoshParent;
    JoshParent -> Hero;
    JoshParent[shape=circle,label="",height=0.0001,width=0.0001];
    
    {
        rank=same;
        Kae[label="Kae"];
        Hero[label="Hero"];
        Kae -> Hero;
    }
    
    Kae -> KaeParent;
    Hero -> HeroParent;
    KaeParent -> Liz;
    KaeParent[shape=circle,label="",height=0.0001,width=0.0001];
    HeroParent -> George;
    HeroParent[shape=circle,label="",height=0.0001,width=0.0001];
    
    {
        rank=same;
        George[label="George"];
        Liz[label="Liz"];
        Ocean[label="Ocean"];
        Egg[label="Egg"];
        Liz -> Ocean -> Egg;
    }
}

这是rankdir=TB 显示的内容:

这是rankdir=LR 显示的内容:

如您所见,从LR 图像中,节点的绘制顺序是“Ocean, George, Egg”,而不是像TB 图像那样的“Ocean, Egg, George”。

【问题讨论】:

    标签: graphviz dot


    【解决方案1】:

    您可以通过在EggGeorge 之间添加一个显式但不可见的边来强制排序:

    Liz -> Ocean -> Egg;                // last line of your code
    Egg -> George[ style = invis ];     // additional edge
    

    这会产生

    不过,我无法解释 TBLR 之间的不同行为。

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多