You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除Graphviz网络拓扑图中的双向重复箭头?

解决Graphviz双向通信箭头显示为两条独立箭头的问题

要避免双向通信的两条独立箭头,核心思路是用单条双向边替代成对的单向边,同时配合现有配置优化显示效果,具体方法如下:

1. 替换成对单向边为双向边

你当前代码中每个双向通信都是用两条反向的单向边实现(比如BBB:141 -> CCC:161和CCC:161 -> BBB:141),这会生成两条独立箭头。改用dir=both属性定义单条双向边,就能合并成一条带双向箭头的边。

比如把原来的成对边:

BBB:141 -> CCC:161
CCC:161 -> BBB:141

替换成:

BBB:141 -> CCC:161 [dir=both]

2. 保留并利用concentrate配置

你已经开启了concentrate=true,这个配置会自动合并节点间的多条边,配合dir=both使用能让端口级的双向边布局更紧凑,避免箭头重叠。

修改后的完整代码

node [shape=box, style=filled, fillcolor=white, color=grey, margin=0];
graph [bgcolor=floralwhite];
edge[arrowhead="normal", color="darkblue", arrowsize=1];
rankdir=LR;
concentrate=true;

AAA [label=<
        <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="2" color="black">
        <TR><TD><B>10.182.2.1</B></TD></TR>
        <TR><TD>AAA</TD></TR>
        <TR><TD>Switch1</TD></TR>
        <TR><TD PORT="111">1/1/1</TD></TR>
        <TR><TD PORT="121">1/2/1</TD></TR>
        <TR><TD PORT="161">1/6/1</TD></TR>
        </TABLE>
    >];

BBB [label=<
        <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="2" color="black">
        <TR><TD><B>10.182.2.2</B></TD></TR>
        <TR><TD>BBB</TD></TR>
        <TR><TD>Switch2</TD></TR>
        <TR><TD PORT="141">1/4/1</TD></TR>
        <TR><TD PORT="151">1/5/1</TD></TR>
        </TABLE>
    >];

CCC [label=<
        <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="2" color="black">
        <TR><TD><B>10.182.2.3</B></TD></TR> 
        <TR><TD>CCC</TD></TR> 
        <TR><TD>Switch3</TD></TR> 
        <TR><TD PORT="111">1/1/1</TD></TR>
        <TR><TD PORT="161">1/6/1</TD></TR>
        </TABLE>
    >];

DDD [label=<
        <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="2" color="black">
        <TR><TD><B>10.182.2.4</B></TD></TR>
        <TR><TD>DDD</TD></TR>
        <TR><TD>Switch4</TD></TR>
        <TR><TD PORT="141">1/4/1</TD></TR>
        <TR><TD PORT="151">1/5/1</TD></TR>
        </TABLE>
    >];

EEE [label=<
        <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="2" color="black">
        <TR><TD><B>10.182.2.5</B></TD></TR>
        <TR><TD>EEE</TD></TR>
        <TR><TD>Switch5</TD></TR>
        <TR><TD PORT="111">1/1/1</TD></TR>
        <TR><TD PORT="121">1/2/1</TD></TR>
        <TR><TD PORT="161">1/6/1</TD></TR>
        </TABLE>
    >];

// 替换为双向边
BBB:141 -> CCC:161 [dir=both]
BBB:151 -> AAA:121 [dir=both]
AAA:111 -> EEE:161 [dir=both]
AAA:161 -> DDD:141 [dir=both]
CCC:111 -> DDD:151 [dir=both]
}

额外优化提示

  • 如果需要区分双向箭头的样式,可以单独设置arrowhead和arrowtail属性,比如[dir=both, arrowhead=open, arrowtail=dot]
  • 若仍有布局问题,可以调整ranksep或nodesep参数来控制节点和边的间距

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:56:00