Practicando con D3.js y datos del IBEX35 – Parte II

Práctica 2: Reorganizando el código

En la anterior entrada, leímos una fuente de datos CSV desde d3.js y fuímos capaces de representar esos datos en una gráfica lineal. Para que el código javascript fuera lo más claro posible de leer, lo escribí lo más linealmente posible sin prestar atención a la forma más eficaz de hacerlo.

En esta nueva entrada, casi no vamos a introducir modificaciones. Aprovecharemos que ya tenemos asimilado el código anterior para reorganizarlo un poco.

Nuestro anterior código, tenía la siguiente organización:

Como he dicho antes, escribí este código para que fuera lo más secuencial posible. Además, la anchura width del elemento svg la calculaba en función del ancho disponible, para adaptarse a éste.

Ahora, vamos a reescribir este código para optimizarlo un poco:

  • Podemos crear el elemento svg contenedor sin esperar a tener los datos. De este modo, si los datos tardan mucho en ser recuperados, evitamos que el documento esté vacío.
  • Las definiciones (escalas, ejes y gráfica) podemos también podemos calcularlas sin esperar a tener los datos (con la excepción que no sabemos cuáles son los valores extremos, ahora veremos cómo resolver este problema)
  • Si el navegador cambia de tamaño, el gráfico ya no encajará. Vamos también a estar pendiente si el documento cambia de tamaño, para recalcular el tamaño del gráfico

La nueva organización quedaría así:

Espero que sea fácil de seguir cómo los bloques de código siguen siendo los mismos. La diferencia más importante es que los he reorganizado.

El código final es el siguiente:

El único detalle adicional que me falta por explicar es que he configurado esta nueva versión para que la altura de la gráfica sea variable, ocupando el 100% del área visible del navegador. Para conseguir este efecto, los pasos que he seguido son los siguientes:

  • El div donde voy a insertar mi gráfica, está dentro de otro div con id wrapper.
  • He definido una regla CSS para que este div#wrapper ocupe el 100% de la altura visible Mi div#ibex35 que es donde inserto la gráfica, lo he configurado position:absolute para que su altura no afecte al contenedor div#wrapper.
  • Por último, recupero la altura de este div#wrapper para definir la altura de mi gráfica.

El resultado final, podéis abrirlo en una nueva ventana en este enlace.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*
*
Sitio Web