Por desgracia, creo que va a ser difícil de encontrar esta solución fácilmente disponible en Javascript o PHP. Pero, creo que su problema se puede dividir en pequeños sub-problemas (según sus reglas) para ayudarlo a diseñar su solución.
Identificaría cuáles de sus reglas son las más importantes. A juzgar por el aspecto del gráfico que proporcionó, diría que las reglas n. ° 1 y n. ° 2 proporcionarían la mayor mejora en la legibilidad.
Para determinar la ubicación de acuerdo con esas reglas, calculo los contenedores de límites del texto y las burbujas y pruebo la intersección. En la intersección, muévase a una ubicación sin intersección. Si no se puede encontrar uno, use un espacio con una superposición mínima.
Esto le permitiría también crear una heurística de colocación ponderada para arriba a la izquierda, abajo a la derecha, etc., para ayudar a colocar las etiquetas en ubicaciones "preferidas".
Intentaré escribir una pequeña parte del algoritmo de ubicación utilizando dos burbujas con dos etiquetas que generalmente están cerca y podrían superponerse. Si puede generalizar su algoritmo de ubicación para trabajar en este pequeño subconjunto, debería avanzar moviendo más burbujas.
Además, tal vez podría utilizar algo del orden de un árbol kd u otra estructura de datos de división de espacio para localizar vecinos más cercanos para evitar.
Excelente pregunta. Me gustaría ofrecer un bouty, pero leer "asesinatos por cada 1.000 habitantes" en la tabla me hace callar y olvidarse de la palabra "recompensa". –
András, la imagen simplemente sirve como ilustración de un gramo de dispersión con etiquetas. Lo tomé desde aquí: http://flowingdata.com/2010/11/23/how-to-make-bubble-charts/. Disculpa si no era una imagen de ejemplo adecuada: no presté mucha atención a los indicadores reales trazados. – dani
Creo que el alcance de esta pregunta es demasiado amplio. –