我正在尝试从绘制点并且部分或全部具有标签的图形 xy 图中提取语义。标签被绘制在“点附近”,以便人们通常可以理解哪个标签与哪个点对应。例如,在此图中,可以清楚地看到哪个标签(数字)属于哪个点(*),并且基于欧几里得距离的算法将起作用。(标签和点没有语义排序 - 例如散点图)
*1
*2
*3
*4
在拥挤的图中,创作软件/人可以将标签放置在不同的方向以避免重叠。例如在
1**2
**4
3
人类读者通常可以计算出哪个标签与哪个标签相关联。
我接受的一种解决方案是创建一个欧几里得距离矩阵并打乱行以获得函数的最小值(例如,对角线或其他启发式距离的平方和)。在第二个示例中(从 NW 角顺时针标记为 a、b、c、d 的点)我们有一个距离矩阵(到 1 dp)
a b c d
1ab2 1 1.0 2.0 2.2 1.4
dc4 2 2.0 1.0 1.4 2.2
3 3 2.0 2.2 1.4 1.0
4 2.2 1.4 1.0 2.0
我们需要给a1 b2 c4 d3
. 交换第 3 行和第 4 行给出对角线的最小和。这是一个更复杂的示例,其中简单地选择最近的可能会失败
*1*2*5
**4
3 *6
如果解决了这个问题,那么我将需要处理标签数量可能小于或大于点数的情况。
如果算法是标准的,我将不胜感激开源 Java 的指针(例如 JAMA 或 Apache 数学)
注意:这个 SO 答案将附近的点与路径关联起来并不能很好地作为答案,因为给出了通过这些点的路径。