Este es mi código de gráfico de barras. Pero de poniendo los primeros datos en la parte baja de la grafica y los subsecuentes se van apilando hacia arriba. Así mismo se puede cambiar la escala de la grafica para hacerla mas grande y poder visualizarla mejor o más pequeña si se quiere. Tambien se puede seleccionar entra serie u otra con solo cambiar la variable correspondiente. Estoy a plicando solo visto hasta esta parte del curso. Cualquier duda o sugerencia con gusto la revisamos. Saludos.
<canvas width="600" height="400"></canvas>
<script>
//---> FUNCIONES
function graficaInd(x, y, valor, color){
var canvas = document.querySelector('canvas');
var grafica = canvas.getContext('2d');
grafica.fillStyle = color;
grafica.fillRect(x, y, 100, valor);
grafica.strokeStyle = 'black';
grafica.strokeRect(x, y, 100, valor);
}
function texto(navegador, x, y, valor, color){
var canvas = document.querySelector('canvas');
var text = canvas.getContext('2d');
text.font = '12px Arial';
text.fillStyle = color;
text.fillText(navegador, x, y, valor, color);
}
//---> PROGRAMA
var serie2009 = [6, 47, 41, 3, 3, '2009'];
var serie2019 = [81, 9, 3, 3, 4, '2019'];
var navegador = ['Chrome', 'Firefox', 'IE/Edge', 'Safari', 'Otros'];
var colores = ["blue","green","yellow", "red","gray"];
var serie = [];
//Serie a usar
var serie = serie2009; //<------- Cambiar la variable de la serie
var escala = 3; //<-------- Cambiar la escala
//Capturar los datos
var cont = 0;
var newX = 0;
var newY = 0;
var sumPercent = 0;
while(cont <= serie.length){
let xIni = 300;
let yIni = 400;
if(cont == 0){
graficaInd(xIni, yIni, -serie[cont] * escala, colores[cont]);
texto(navegador[cont] + ": " + serie[cont] + "%", xIni + 150, yIni, 30 * escala, colores[cont]);
sumPercent = sumPercent + serie[cont] * escala;
}
if(cont > 0 && cont < serie.length - 1 ){
graficaInd(xIni, yIni - sumPercent, -serie[cont] * escala, colores[cont]);
texto(navegador[cont] + ": " + serie[cont] + "%", xIni + 150, yIni - (20 * cont), 30 * escala, colores[cont]);
sumPercent = sumPercent + serie[cont] * escala;
}
if(cont == serie.length - 1){
texto("Serie: " + serie[cont], xIni + 150, yIni - (20 * cont + 1), 30 * escala, colores[cont]);
}
cont++;
};
</script>