问题描述
这是我的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。
我在下面的点中添加的是Imperva
和exDNS
之间的节点inDNS
的显式声明。
我认为这是可行的,因为dotguide 2.6节中有这样的措辞(这些注释中的rankdir是默认的从上到下,因此对于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
到{{1 }}越过Imperva
(因为首先定义了exDNS
)。将节点Imperva
的定义移到Imperva
的行下方-或完全像您的点一样忽略该节点的显式定义-因此Imperva是在inDNS之后定义的,并且边缘位于{{1}以下},就像您的图表一样。
inDNS
产生: