微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在graphviz中如何在两个节点之间施加直边?

如何解决在graphviz中如何在两个节点之间施加直边?

这是我的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}
}

它产生以下结果:

enter image description here

我希望边缘browser -> Imperva在节点External DNSInternal 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}
}

enter image description here

,

您可以做到这一点而无需摆弄端口。

您当前的点首先明确定义了exDNS和inDNS,然后在边缘隐式定义了Imperva。

我在下面的点中添加的是ImpervaexDNS之间的节点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

产生:

image produced using dot.exe -Tpng -O graph.dot

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。