График, который вам нужен в Graphviz, довольно прост, вы просто включаете dir=TD
, разделяете ваши узлы на подграфы и используете rank=same
внутри них, чтобы заставить их быть на одном уровне.
Сложность может быть связана с достижением узла Z
в вашем примере. Вы можете сделать это, используя HTML -подобные таблицы в метке. Полная графическая интерпретация вашего примера изображения будет выглядеть следующим образом:
digraph {
node [shape=rect style=filled fillcolor="#d2deee" fontname="Arial"]
edge [color="#658bb2"]
dir = TD
1900 -> 1950 -> 2020 [style=invis]
subgraph 1900 {
rank=same
1900 [
fillcolor="#efefef"
fontcolor="#182697"
fontname="Arial bold"
]
A
}
subgraph 1950 {
rank=same
1950 [
fillcolor="#efefef"
fontcolor="#182697"
fontname="Arial bold"
]
B
}
subgraph 2020 {
rank=same
2020 [
fillcolor="#efefef"
fontcolor="#182697"
fontname="Arial bold"
]
C
}
Z [
shape=plain
label=<
<table cellspacing="0">
<tr>
<td cellpadding="15" border="0" width="70" port="p1"></td>
<td border="0">Z</td>
<td cellpadding="15" border="0" width="70" port="p2"></td>
</tr>
</table>
>
]
A -> Z:p1
B -> Z:p2
Z -> C
C
}
, что сделает вас: