Una introducción a la creación de representaciones visuales de sus datos.

D3.js es una biblioteca de JavaScript que se utiliza para manipular documentos basados en datos. Utiliza HTML, CSS y SVG para crear representaciones visuales de datos que se pueden ver en cualquier navegador moderno.
También proporciona algunas funciones increíbles para interacciones y animaciones.
En este tutorial, exploraremos los conceptos y características básicos de D3.js. Aprenderemos a usarlo con la ayuda de algunos ejemplos como renderizar un gráfico de barras, renderizar elementos HTML y SVG y aplicarles transformaciones y eventos.
También hemos creado un curso gratuito de 10 partes sobre D3.js en Scrimba. Compruébalo aquí.
Empezando con D3
Como D3.js es una biblioteca de JavaScript, simplemente puede incluirlo en su archivo HTML dentro de una etiqueta de secuencia de comandos.
La fuente completa y las pruebas también están disponibles para descargar en GitHub.
Selección DOM
Usando D3.js, podemos manipular el Modelo de Objetos de Documento (DOM), lo que significa que podemos seleccionar elementos y aplicarles diversas transformaciones.
Comencemos con un ejemplo simple, donde usaremos D3 para seleccionar y cambiar el color y el tamaño de fuente de una etiqueta de título.
Learn D3 in 5 minutesToday is a beautiful day!!
d3.select('h3').style('color', 'darkblue'); d3.select('h3').style('font-size', '24px');
Así que simplemente estamos encadenando el select()
método en el d3
objeto y luego seguimos con style()
. El primer parámetro dicta lo que queremos cambiar y el segundo da el valor. Aquí está el resultado:

El enlace de datos
El siguiente concepto que deberá aprender es el enlace de datos, ya que esa es una de las características más interesantes de D3. Usándolo, podemos poblar o manipular elementos DOM en tiempo real.
En nuestro HTML, tenemos una lista sencilla desordenada <
ul>:
Queremos crear los elementos de la lista utilizando un objeto de datos. Aquí está el código para hacer exactamente eso:
var fruits = ['apple', 'mango', 'banana', 'orange']; d3.select('ul') .selectAll('li') .data(fruits) .enter() .append('li') .text(function(d) { return d; });
En nuestro código JavaScript anterior, D3 primero selecciona <
ul> an d an
y
de it us
incluyen los elect() and
métodos selectAll (). Puede parecer un poco extraño que estemos seleccionando le
todos los elementos li antes de crearlos, pero así es como funciona D3.Luego pasamos los datos con el data()
método y agregamos enter()
, lo que funciona como un bucle. Todo lo que ocurra después de este punto se ejecutará una vez por elemento de la fruits
matriz.
En otras palabras, luego agrega un <
li> para cada elemento en los datos. Para ever
y

Original text
t usin
del método text (). El e
parámetro de insid
la función de devolución de llamada text () se refiere al elemento de la matriz en la iteración dada (apple, mang o, etc.).Así que aquí está nuestro resultado final:

Crear elementos SVG
Scalable Vector Graphics (SVG) es una forma de renderizar elementos gráficos e imágenes en DOM. Como SVG está basado en vectores, es ligero y escalable. D3 usa SVG para crear todas sus imágenes y, por lo tanto, es un componente básico de la biblioteca.
Aquí, en el siguiente ejemplo, se dibuja un rectángulo usando D3 en un contenedor SVG.
//Select SVG elementvar svg = d3.select('svg');
//Create rectangle element inside SVGsvg.append('rect') .attr('x', 50) .attr('y', 50) .attr('width', 200) .attr('height', 100) .attr('fill', 'green');
En este código, D3 representa un elemento rectangular dentro del DOM. Primero selecciona el elemento SVG y luego representa un elemento rectangular dentro de él. También establece las coordenadas xey del rectángulo junto con sus propiedades de ancho, alto y relleno utilizando el attr()
método.

Crear un gráfico de barras
D3 también nos permite crear muchos tipos diferentes de tablas y gráficos para representar datos de manera eficiente. En el siguiente ejemplo, estamos creando un gráfico de barras simple usando D3.
Comencemos creando una etiqueta SVG directamente en nuestro HTML.
Luego, escribiremos el JavaScript que necesitamos para representar el gráfico de barras en nuestro vg> tag:
var data = [80, 120, 60, 150, 200];
var barHeight = 20;
var bar = d3.select('svg') .selectAll('rect') .data(data) .enter() .append('rect') .attr('width', function(d) { return d; }) .attr('height', barHeight - 1) .attr('transform', function(d, i) { return "translate(0," + i * barHeight + ")"; });
In this code, we have an array of numbers which we will use to render our bar chart. Each item in an array would represent a single bar. We make use of the fact that bars are just rectangles with variable width or height.
After selecting the SVG and rectangle elements, we pass our dataset using the
data()
method and call enter()
to start looping on data.
For each data item, we render a rectangle and set its width equivalent to its value. We then set the height of each bar, and to avoid overlapping, we provide some padding to it by subtracting 1 from
barHeight
.
We then transform our bars using the translate property which will position every rectangle one after another rather than starting from the same point.
transform()
takes a callback function which gets data and index in its parameters. We translate the rectangle on the y-axis, by multiplying index with the height of the bar.
Here’s the result:

Event Handling
Finally, let’s also look at event handling. D3 also supports built-in and custom events which we can bind to any DOM element with its listener. In the example below, we are binding the click event to the button and appending a heading tag to a body in its event handler.
d3.select('#btn') .on('click', function () { d3.select('body') .append('h3') .text('Today is a beautiful day!!'); });
So when we click the button, the text below appears:

Conclusion
D3.js is a very powerful, yet simple, JavaScript library that allows you to play with and bring life to documents based on data using HTML, CSS, and SVG.
There are a lot of good resources available online to learn D3.js. There is a free course on D3.js which we have created on Scrimba and is available for free here.
Thank you :)
I am Sohaib Nehal. I am a Full-Stack Web Application Developer. You can reach me at [email protected] or on Twitter @Sohaib_Nehal. Thank you :-)