解决小图中简单的 D3.js 交叉边

Posted

技术标签:

【中文标题】解决小图中简单的 D3.js 交叉边【英文标题】:Solve simple D3.js crossing edges in small graphs 【发布时间】:2021-05-01 16:06:58 【问题描述】:

我正在开发一个 Web 应用程序,可让您在交互式图表中加入点。我正在使用 D3.js,带有 force-directed 模块。

但我有一个非常特殊的问题:在小型网络中越界。

我读过这篇文章:D3.js force directed graph, reduce edge crossings by making edges repel each other,但它是关于更大的网络的。

我的网络是这样开始的:

然后,用户将创建边缘,留下如下内容:

问题是我发现了很多可以避免的交叉边缘。这是一个典型的例子:

我该如何解决这个问题?我知道有些案件是无法解决的。但是我的网络将有很少的节点,而且大多数时候可以在不交叉边缘的情况下绘制它们。

如何尝试在这个小型网络中找到最佳布局?提前致谢。

【问题讨论】:

【参考方案1】:

Sugiyama Algorithm 和 Gansner et al. 提供边缘最小化。您可以使用多个跨不同开源图形库的 javascript 实现

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review

以上是关于解决小图中简单的 D3.js 交叉边的主要内容,如果未能解决你的问题,请参考以下文章

D3.js 强制有向图,通过使边缘相互排斥来减少边缘交叉

d3.js 图中圆圈的随机颜色

D3.js:条形图中的条形,刻度未正确建模数据

d3.js 如何在条形图中添加线条

使用 D3.js 将误差线添加到分组条形图中

使用 d3.js/chart.js/highcharts 在实际和预测散点图中的 R 平方最佳拟合线