Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

196
Vistas
¿Cómo agregar polilíneas no superpuestas y etiquetas de texto a un gráfico circular 3D usando d3.js?

Comenté el código adicional en el código ya existente escrito por DavidB y creé este ejemplo para extraer solo un gráfico circular 3D. Me gustaría agregar polilíneas (no superpuestas) y etiquetas de texto al gráfico circular. Cualquier sugerencia es altamente apreciada. Los resultados esperados deberían verse así. ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Cómo evitar la superposición de texto SVG

Dado que el texto está absolutamente posicionado, no hay una buena manera de lidiar con las etiquetas superpuestas. Los SVG tienen elementos SVGs que le permiten tspan palabras, pero eso es todo.

En uno de mis proyectos de visualización de datos, tuvimos que lidiar con muchas etiquetas que debían cambiar de tamaño cuando el gráfico se encogía. La forma en que manejamos esto fue calculando el espacio disponible. Luego "simular" el tamaño total de una etiqueta de texto (en un tamaño de fuente dado) usando:

 selection.node().getBBox().width selection.node().getBBox().height

Si las dimensiones de la nueva etiqueta se hubieran superpuesto, intentaría nuevamente con un tamaño de fuente más pequeño, hasta que las dimensiones de la etiqueta fueran más pequeñas que el espacio disponible. No fue una gran solución...

Un problema con la generación de elementos SVG (para medir su tamaño) es que desencadena una nueva representación, que es costosa, considerando la cantidad de iteraciones.

Puede mejorar el rendimiento de este enfoque de "fuerza bruta", utilizando un <canvas> para calcular el tamaño de una etiqueta determinada, sin renderizar nada:

 let canvasEl = document.createElement('canvas'); let canvas = canvasEl.getContext('2d').font('12px sans-serif'); const getWidthHeightOfLabel = (label) => { return { width: canvas.measureText(label).width, height: canvas.measureText(label).height }; }

En ciertas situaciones, evitamos las etiquetas SVG por completo y optamos por texto HTML simple y antiguo, que colocaríamos dinámicamente sobre el SVG.

¡Avíseme si mi sugerencia no está clara o si necesita información adicional! Gracias.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda