7.3. Ejemplo con librería – Chart.js
En este ejemplo vamos a crear un gráfico de barras con la librería Chart.js a partir del dataset de estadísticas de uso de redes sociales. Con Chart.js podemos generar gráficos de manera sencilla, con estilos atractivos y funcionalidades adicionales como leyendas, tooltips y escalas automáticas.
📦 Cómo incluir la librería
Incluimos Chart.js directamente desde un CDN en el HTML:
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<script type="module" src="main.js"></script>
Y añadimos un <canvas> para el gráfico:
<canvas id="graficoRedes" width="600" height="400"></canvas>
📌 Flujo de trabajo con Chart.js
- Incluir Chart.js desde CDN.
- Cargar el dataset CSV con
fetch. - Parsear el contenido a objetos.
- Filtrar por año (ej. 2020).
- Preparar arrays de etiquetas y valores.
- Configurar el gráfico con
new Chart(). - Mostrar el gráfico en el canvas.
🧩 Código paso a paso
1) Cargar y parsear el CSV
async function cargarCSV() {
const res = await fetch("datasets/csv/estadisticas-de-uso-de-redes-sociales.csv");
const texto = await res.text();
let lineas = texto.trim().split("\n");
let cabeceras = lineas.shift().split(",");
return lineas.map(linea => {
let valores = linea.split(",");
return Object.fromEntries(cabeceras.map((c, i) => [c, valores[i]]));
});
}
2) Filtrar datos por año
function filtrarPorAno(datos, ano = "2020") {
return datos.filter(d => d.Año === ano);
}
3) Preparar arrays para Chart.js
function prepararDatos(datos) {
const etiquetas = datos.map(d => d.Red);
const valores = datos.map(d => parseFloat(d.Porcentaje));
return { etiquetas, valores };
}
4) Crear el gráfico
async function crearGrafico() {
const datos = await cargarCSV();
const datos2020 = filtrarPorAno(datos, "2020");
const { etiquetas, valores } = prepararDatos(datos2020);
const ctx = document.getElementById("graficoRedes").getContext("2d");
new Chart(ctx, {
type: "bar",
data: {
labels: etiquetas,
datasets: [{
label: "Porcentaje de uso (%)",
data: valores,
backgroundColor: "#ba273b"
}]
},
options: {
responsive: true,
plugins: {
legend: { display: true },
tooltip: { enabled: true }
},
scales: {
y: { beginAtZero: true, title: { display: true, text: "Porcentaje" } },
x: { title: { display: true, text: "Red social" } }
}
}
});
}
crearGrafico();
Consejo
Chart.js soporta muchos tipos de gráficos:
bar(barras)line(líneas)pie(tarta)doughnut(anillo)radar,polarArea, etc.
Puedes cambiar type: "bar" por otro para experimentar.
⚖️ Comparación con el enfoque vanilla
| Aspecto | Canvas (vanilla) | Chart.js |
|---|---|---|
| Dibujo básico | A mano con fillRect, fillText |
Automático con datasets y labels |
| Escalas | Manual (cálculo de proporciones) | Automáticas y configurables |
| Estilos | Manual (colores, fuentes) | Declarativos (backgroundColor, border…) |
| Interactividad | Hay que programarla | Incluida (tooltips, leyenda, hover) |
| Tipos de gráfico | Solo lo que programes | Múltiples tipos listos para usar |
| Curva de uso | Baja pero requiere más trabajo | Muy baja: gráfico listo en pocas líneas |
📝 Preguntas de repaso
Repaso
- ¿Qué diferencia principal hay entre el gráfico en canvas (vanilla) y el de Chart.js?
- ¿Qué arrays preparamos para pasarlos al gráfico en Chart.js?
- ¿Qué propiedad permite indicar el tipo de gráfico (
bar,line,pie…)? - ¿Cómo activarías una etiqueta en el eje X que muestre “Red social”?
- ¿Qué otro tipo de gráfico probarías con este dataset y por qué?