graphviz - 将 Graphviz 边缘移开

标签 graphviz graph-visualization

在此图中:

graphviz

使用 Graphviz/Dot 渲染,红色边缘连接两个节点,而其他边缘连接节点内部的端口。节点具有 HTML 标签,输入和输出的 TD 具有 PORT 属性。

有没有办法让 Dot 将红色节点“移开”,即向左或向右,可能是弯曲的,这样它就不会越过黑色边缘。

它用于自动生成的图表,可以包含两个以上的节点,不一定全部垂直对齐。

该图的源代码:

digraph G {
rankdir=TB
src [shape=plaintext label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD BORDER="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="20"></TD><TD PORT="in1" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">in1</FONT></TD><TD WIDTH="10"></TD><TD PORT="in2" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">in2</FONT></TD><TD WIDTH="10"></TD><TD PORT="in3" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">in3</FONT></TD><TD WIDTH="20"></TD></TR></TABLE></TD></TR><TR><TD BORDER="1" STYLE="ROUNDED" CELLPADDING="4" COLOR="black">A<BR/><FONT POINT-SIZE="10">node</FONT></TD></TR><TR><TD BORDER="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="20"></TD><TD PORT="out1" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">out1</FONT></TD><TD WIDTH="10"></TD><TD PORT="out2" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">out2</FONT></TD><TD WIDTH="20"></TD></TR></TABLE></TD></TR></TABLE>>];


rankdir=TB
snk [shape=plaintext label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD BORDER="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="20"></TD><TD PORT="in1" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">in1</FONT></TD><TD WIDTH="10"></TD><TD PORT="in2" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">in2</FONT></TD><TD WIDTH="10"></TD><TD PORT="in3" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">in3</FONT></TD><TD WIDTH="20"></TD></TR></TABLE></TD></TR><TR><TD BORDER="1" STYLE="ROUNDED" CELLPADDING="4" COLOR="black">B<BR/><FONT POINT-SIZE="10">node</FONT></TD></TR><TR><TD BORDER="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="20"></TD><TD PORT="out1" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">out1</FONT></TD><TD WIDTH="10"></TD><TD PORT="out2" BORDER="1" CELLPADDING="1"><FONT POINT-SIZE="10">out2</FONT></TD><TD WIDTH="20"></TD></TR></TABLE></TD></TR></TABLE>>];

    snk -> src [style="", arrowhead="vee", color=red, headlabel=<>, fontsize=10, labelangle=45, labeldistance=2.0, labelfontcolor=black];

    src:out1 -> snk:in1 [style="", arrowhead="normal", color=black, headlabel=<>, fontsize=10, labelangle=45, labeldistance=2.0, labelfontcolor=black];
    src:out1 -> snk:in2 [style="", arrowhead="normal", color=black, headlabel=<>, fontsize=10, labelangle=45, labeldistance=2.0, labelfontcolor=black];
    src:out2 -> snk:in3 [style="", arrowhead="normal", color=black, headlabel=<>, fontsize=10, labelangle=45, labeldistance=2.0, labelfontcolor=black];

    {rank=source; src}
    {rank=sink; snk}

}

最佳答案

您可以将罗盘点添加到边缘定义中:

snk:se -> src:ne

snk:e -> src:e

向右箭头,或

snk:sw -> src:nw

snk:w -> src:w

左侧的箭头。

当然,我不确定当有多个节点未对齐时这是否有效。

graph with edge out of the way

关于graphviz - 将 Graphviz 边缘移开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157650/

相关文章:

visualization - 在 graphviz 中将具有相同颜色的节点彼此靠近分组

graph-databases - Cosmos DB Graph 的可视化工具

python - Bokeh 中的独立节点和边缘悬停工具?

javascript - 如何使用 PHP 和 HTML 绘制这种类型的 "binary matrix"图形(我不知道它是否有名称)

graphviz - 使用rank=same时丢失x y边缘

r - 使 ggplot 看起来像 R 中的原生图一样漂亮

graphviz - DOT语言是否支持变量/别名?

graph - 如何优化graphviz中的布局以删除不必要的边缘交叉点(交叉点)?

c - Graphviz 作为库 : Create multiple graphs results in error

svg - 如何生成没有 &lt;title&gt; 元素的 SVG 文件?