在graphviz中,如何强制两个节点之间的直边?
这是我的graphviz代码:在graphviz中,如何强制两个节点之间的直边?,graphviz,dot,Graphviz,Dot,这是我的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"
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
直接在节点外部DNS
和内部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}
}
很难使边正常工作(明确定位它们)。但是,通过将边缘附加到端口,可以对边缘位置产生一些影响。
我想这就是你想要的:
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和INDN,然后在边中隐式定义Imperva 我在下面的点中添加的全部内容是在
exDNS
和inDNS
之间显式声明nodeImperva
我认为这是可行的,因为第2.6节中有这样的措辞(注意,在这些词语中,rankdir是默认的自上而下,因此对于rankdir=LR,将左读为上,右读为下):
TBH我不完全确定这是原因,因为dotguide没有为排序提供默认值
无论dotguide如何,在我下面的点中,如果我将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}
}
产生:
您无需摆弄端口即可完成此操作
当前点首先显式定义exDNS和INDN,然后在边中隐式定义Imperva
我在下面的点中添加的全部内容是在exDNS
和inDNS
之间显式声明nodeImperva
我认为这是可行的,因为第2.6节中有这样的措辞(注意,在这些词语中,rankdir是默认的自上而下,因此对于rankdir=LR,将左读为上,右读为下):
TBH我不完全确定这是原因,因为dotguide没有为排序提供默认值
无论dotguide如何,在我下面的点中,如果我将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}
}
产生:
我不明白您在我的代码中做了哪些更改。我从浏览器开始在三个边缘添加了(尾部)端口()。这有助于打开外部DNS和内部DNS之间的鸿沟。哦,现在我可以看到它-浏览器:ne。明白了。我不明白你在我的代码中做了什么更改。我从浏览器开始在三个边缘添加了(尾部)端口()。这有助于打开外部DNS和内部DNS之间的鸿沟。哦,现在我可以看到它-浏览器:ne。明白了,很有趣+1非常有趣+1.