在 graphviz 中如何强制两个节点之间的直边?
In graphviz how to force a straight edge between two nodes?
这是我的 graphviz 代码:
digraph G {
rankdir="LR"
node [shape=square]
exDNS [label="External DNS"]
inDNS [label="Internal DNS"]
tm [label="Traffic Manager"]
pri [label="App Service\nPrimary Region"]
sec [label="App Service\nSecondary Region"]
Browser -> {inDNS,exDNS} -> Imperva-> tm -> {pri,sec}
Browser -> Imperva -> {pri,sec}
}
它产生以下结果:
我希望边缘 Browser -> Imperva
在节点 External DNS
和 Internal DNS
之间直行。
我该怎么做?
我正在使用点渲染器。
很难让边缘表现出来(明确定位它们)。但是通过将边缘附加到端口,您可以对边缘位置产生一些影响。
我认为这就是您所追求的:
digraph G {
rankdir="LR"
// graph [splines=polyline]
node [shape=square]
exDNS [label="External DNS"]
inDNS [label="Internal DNS"]
tm [label="Traffic Manager"]
pri [label="App Service\nPrimary Region"]
sec [label="App Service\nSecondary Region"]
Browser:ne -> exDNS -> Imperva
Browser:e -> Imperva
Browser:se -> inDNS -> Imperva
Imperva-> tm -> {pri,sec}
Imperva -> {pri,sec}
}
您无需摆弄端口即可完成此操作。
您当前的点首先显式定义 exDNS 和 inDNS,然后在边缘隐式定义 Imperva。
我在下面的点中添加的是 exDNS
和 inDNS
之间的节点 Imperva
的显式声明。
我认为这是可行的,因为在 dotguide 部分 2.6 中有这样的措辞(注意这些词中的 rankdir 是默认值 top-to-bottom 因此对于 rankdir=LR,请将左读为上,将右读为下) :
If a subgraph has ordering=out, then out-edges within the subgraph that have the same tail node wll fan-out from left to right in their order of creation.
TBH 我不完全确定这是原因,因为 dotguide 没有为 ordering
.
提供默认值
不管点指南如何,在我下面的点中,如果我将 Imperva
的定义向上移动一行到 exDNS
节点声明上方,那么边缘从 Browser
到 Imperva
越过 exDNS
(因为 Imperva
是先定义的)。将节点 Imperva
的定义移至 inDNS
行下方 - 或者完全像您的点那样省略节点的显式定义 - 因此 Imperva 在 inDNS 之后定义,边缘低于 inDNS
喜欢你的图表。
digraph G {
rankdir="LR"
node [shape=square]
exDNS [label="External DNS"]
Imperva;
inDNS [label="Internal DNS"]
tm [label="Traffic Manager"]
pri [label="App Service\nPrimary Region"]
sec [label="App Service\nSecondary Region"]
Browser -> {inDNS,exDNS} -> Imperva-> tm -> {pri,sec}
Browser -> Imperva -> {pri,sec}
}
产生:
这是我的 graphviz 代码:
digraph G {
rankdir="LR"
node [shape=square]
exDNS [label="External DNS"]
inDNS [label="Internal DNS"]
tm [label="Traffic Manager"]
pri [label="App Service\nPrimary Region"]
sec [label="App Service\nSecondary Region"]
Browser -> {inDNS,exDNS} -> Imperva-> tm -> {pri,sec}
Browser -> Imperva -> {pri,sec}
}
它产生以下结果:
Browser -> Imperva
在节点 External DNS
和 Internal DNS
之间直行。
我该怎么做?
我正在使用点渲染器。
很难让边缘表现出来(明确定位它们)。但是通过将边缘附加到端口,您可以对边缘位置产生一些影响。
我认为这就是您所追求的:
digraph G {
rankdir="LR"
// graph [splines=polyline]
node [shape=square]
exDNS [label="External DNS"]
inDNS [label="Internal DNS"]
tm [label="Traffic Manager"]
pri [label="App Service\nPrimary Region"]
sec [label="App Service\nSecondary Region"]
Browser:ne -> exDNS -> Imperva
Browser:e -> Imperva
Browser:se -> inDNS -> Imperva
Imperva-> tm -> {pri,sec}
Imperva -> {pri,sec}
}
您无需摆弄端口即可完成此操作。
您当前的点首先显式定义 exDNS 和 inDNS,然后在边缘隐式定义 Imperva。
我在下面的点中添加的是 exDNS
和 inDNS
之间的节点 Imperva
的显式声明。
我认为这是可行的,因为在 dotguide 部分 2.6 中有这样的措辞(注意这些词中的 rankdir 是默认值 top-to-bottom 因此对于 rankdir=LR,请将左读为上,将右读为下) :
If a subgraph has ordering=out, then out-edges within the subgraph that have the same tail node wll fan-out from left to right in their order of creation.
TBH 我不完全确定这是原因,因为 dotguide 没有为 ordering
.
不管点指南如何,在我下面的点中,如果我将 Imperva
的定义向上移动一行到 exDNS
节点声明上方,那么边缘从 Browser
到 Imperva
越过 exDNS
(因为 Imperva
是先定义的)。将节点 Imperva
的定义移至 inDNS
行下方 - 或者完全像您的点那样省略节点的显式定义 - 因此 Imperva 在 inDNS 之后定义,边缘低于 inDNS
喜欢你的图表。
digraph G {
rankdir="LR"
node [shape=square]
exDNS [label="External DNS"]
Imperva;
inDNS [label="Internal DNS"]
tm [label="Traffic Manager"]
pri [label="App Service\nPrimary Region"]
sec [label="App Service\nSecondary Region"]
Browser -> {inDNS,exDNS} -> Imperva-> tm -> {pri,sec}
Browser -> Imperva -> {pri,sec}
}
产生: