用点强制正交(垂直或水平)边缘

Posted

技术标签:

【中文标题】用点强制正交(垂直或水平)边缘【英文标题】:Forcing orthogonal (vertical or horizontal) edges with dot 【发布时间】:2013-02-17 23:10:44 【问题描述】:

我想强制点仅显示节点之间的垂直或水平边缘。

我在Family tree layout with Dot/GraphViz的帖子中发现了类似的请求,但我不是在处理树,所以我希望有一个不插入额外节点的解决方案...

如果我构建以下图表:

有向图 G 样条=正交 A [形状=盒子] B [形状=盒子] C [形状=盒子] D [形状=盒子] A -> B A -> C B -> D C -> D

我得到的是这样的:

但我想要一张这样的图表:

我怎样才能得到这样的渲染?

编辑:“样条线”属性似乎没有按预期工作......我做错了什么吗?

【问题讨论】:

【参考方案1】:

您的语法似乎正确。当我运行它时,我得到正交边缘路由(各种):

你有哪个版本?

我问是因为正交边缘路由仅在 2010 年 9 月 28 日及更高版本的 Graphviz 版本中可用。并非所有系统都打包了更新的版本。在我的系统上,我必须 download 并手动安装 Graphviz 以获得比 2.26.3 更新的版本(从 2010 年 1 月 26 日开始)。

假设您的实际图形包含超过 4 个节点,如果您希望线条弯曲并且不想添加额外(不可见)节点,您应该尝试使用 图nodesep 属性。请参阅下面的代码和图像。

digraph G 

    graph [splines=ortho, nodesep=1]
    node [shape=record]

    A -> B, C -> D

【讨论】:

我正在使用 graphviz 3.2.1 并且“正交”对我也不起作用:(。它看起来就像节点之间最短的直线。

以上是关于用点强制正交(垂直或水平)边缘的主要内容,如果未能解决你的问题,请参考以下文章

检测水平和垂直边缘opencv

5.2 基本边缘检测算子—Sobel

MATLAB-图像锐化(空域与频域)

MATLAB-图像锐化(空域与频域)

MATLAB-图像锐化(空域与频域)

边缘的梯度 Python