Graphviz阵列LR但堆叠TB 有向图G { rankdir=LR; Array1[shape=record,label=“{

Graphviz阵列LR但堆叠TB 有向图G { rankdir=LR; Array1[shape=record,label=“{,graphviz,dot,Graphviz,Dot,如果代码中没有rank=same,我会得到我想要的箭头,但不是我想要的箭头,顶部是Array1,底部是Array2。错误消息消失了。我做错了什么?我尝试了几种方法,但所有这些方法都不适用于我,我总是得到错误的布局,或者我必须添加其他几个节点来绘制箭头,使用那些invisib我的数组的箭头也不会被绘制。关键在错误消息中:用类似HTML的标签替换记录。可以找到详细信息 以您的代码和我理解的您想要实现的目标为例,这可以通过将数组创建为两个类似HTML的标签来实现 digraph G { ran

如果代码中没有rank=same,我会得到我想要的箭头,但不是我想要的箭头,顶部是Array1,底部是Array2。错误消息消失了。我做错了什么?我尝试了几种方法,但所有这些方法都不适用于我,我总是得到错误的布局,或者我必须添加其他几个节点来绘制箭头,使用那些invisib我的数组的箭头也不会被绘制。

关键在错误消息中:
用类似HTML的标签替换记录。
可以找到详细信息

以您的代码和我理解的您想要实现的目标为例,这可以通过将数组创建为两个类似HTML的标签来实现

digraph G
{
    rankdir=LR;

    Array1 [ shape = record, label = "{ <a1>A(1) | <a2>A(2) | <a3>A(...) | <an>A(n)}"] ; 
    Array2 [ shape = record, label = "{ <b1>B(1) | <b2>B(2) | <b3>B(...) | <bn1>B(n+1)}"] ;  
    Array1:a1 -> Array2:b1 [style=solid];
    Array1:an -> Array2:bn1 [style=solid];
    //{rank=same; Array1; Array2;}
}
有向图so
{
#纯文本被用来创建类似HTML的标签
节点[形状=纯文本]
#表没有边框,每个单元格和
#单个单元格之间的距离看起来不像记录形状
#端口被定义为单个单元的地址
#可以将边定向到
阵列1[标签=<
A(1)
A(2)
A(……)
A(n)
>];
array2[label=<
B(1)
B(2)
B(…)
B(n+1)
>]; 
阵列1:a1->阵列2:b1;
array1:an->array2:bn;
}
这会产生(我认为)你想要的:

dot -Tpng algoA.dot -o algoA.png                                         :(
Warning: flat edge between adjacent nodes one of which has a record shape - replace records with HTML-like labels
  Edge Array2 -> Array1
Error: lost Array1 Array2 edge
Error: lost Array1 Array2 edge
digraph G
{
    rankdir=LR;

    Array1 [ shape = record, label = "{ <a1>A(1) | <a2>A(2) | <a3>A(...) | <an>A(n)}"] ; 
    Array2 [ shape = record, label = "{ <b1>B(1) | <b2>B(2) | <b3>B(...) | <bn1>B(n+1)}"] ;  
    Array1:a1 -> Array2:b1 [style=solid];
    Array1:an -> Array2:bn1 [style=solid];
    //{rank=same; Array1; Array2;}
}
digraph so 
{
    # plaintext is being used to create HTML-like labels
    node [shape=plaintext]

    # no border for the table, a single border for each cell and
    # no distance between individual cells looks like record shape

    # PORTs being defined as addresses of individual cells
    # that edges can be directed to

    array1 [label=< 
        <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR>
            <TD PORT="a1">A(1)</TD>
            <TD PORT="a2">A(2)</TD>
            <TD PORT="ax">A(...)</TD>
            <TD PORT="an">A(n)</TD>
        </TR> </TABLE>>];

    array2 [label=< 
        <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR>
            <TD PORT="b1">B(1)</TD>
            <TD PORT="b2">B(2)</TD>
            <TD PORT="bx">B(...)</TD>
            <TD PORT="bn">B(n+1)</TD>
    </TR> </TABLE>>]; 

    array1:a1 -> array2:b1;
    array1:an -> array2:bn;
}