このトピックに非常に近い質問がいくつかありましたが、実際には役に立ちませんでした。
私はグラフ作成ライブラリをプログラミングしており、ラベルを重ねずに垂直に配置するアルゴリズムが必要です。私はこれに数日間立ち往生しており、最も基本的な機能にそれを蒸留することができました:
Y軸に沿った一連のラベル位置1 1 2 3 5 6 9
、たとえば10
0
1 2 3 4 5 6 9
333467
234567
元の座標に近くなるように重み付けする必要があります。
これは逆方向にも機能する必要があります。値がスケールの上端に集まっている場合は、(オーバーフローする前に) 可能な限り分散する必要があります。
決定的な答えを探しているわけではありませんが、この問題に取り組む方法について助けてください。私は完全に立ち往生しています。
最後に考えたのは、衝突の可能性がないかすべてのラベルをスキャンし、それらをすべての Y 座標の中心に合わせて 1 つの大きなブロックとして配置することでした。ただし、衝突のセットが複数ある場合、これは機能しません。
編集: このアルゴリズムをより大きなコンテキストに入れるには、次の 2 つの Google チャート API 円グラフを見てください。
ラベルはほとんど弾力性があり、結合して全体の質量を質量の中心に移動することで衝突を回避します。