Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Alguém pode me ajudar a melhorar o meu código?

Depois de muita luta consegui entender mais ou menos a lógica da função dos gráficos e tentei fazer a legenda, mas está bem longe de estar perfeita, ficou entendível, porém não estou conseguindo melhorá-la.

<body>
    <canvas width="600" height="400"></canvas>
    <script>

        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');


        function desenhaRetangulo(x, y, largura, altura, cor) {

            pincel.fillStyle=cor;
            pincel.fillRect(x,y, largura, altura);
            pincel.strokeStyle='black';
            pincel.strokeRect(x,y, largura, altura);

        }

        function desenhaTexto(x, y, texto) {

            pincel.font='15px Georgia';
            pincel.fillStyle='black';
            pincel.fillText(texto, x, y);    
        }


        function desenhaGrafico(x, y, serie, cores, texto){

            desenhaTexto(x, y - 10, texto);

            var somaAltura = 0;
            for(var i = 0; i < 4; i++){
                var altura = serie[i];
                desenhaRetangulo(x, y + somaAltura, 50, altura, cores[i]);
                somaAltura = somaAltura + altura;
            }
       }

       function legendaNavs(x, y, cores, texto){


            for(i = 0; i < 4; i++){
                desenhaRetangulo(x, y, 10, 10, cores[i]);
                desenhaTexto(x + 20, y + 10, texto[i]);
                x += 60;

            }


       }
        var serie2015 = [50, 25, 20, 5];
        var serie2016 = [65, 20, 13, 2];
        var cores = ['blue', 'green', 'yellow', 'red'];
        var navs = ['Chrome','Firefox','Safari','Outros']


        desenhaGrafico(50,50, serie2015, cores, '2015');
        desenhaGrafico(150,50, serie2016, cores, '2016');
        legendaNavs(200,200, cores, navs);

        
    </script>
</body>

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

1 resposta
solução!

Olá, Josué! Tudo bem?

Parabéns pelo seu esforço em entender a lógica da função dos gráficos e tentar fazer a legenda. Você está no caminho certo!

Vamos lá, percebi que o problema está na função legendaNavs. Você está incrementando o valor de x em 60 a cada iteração do loop, o que está fazendo com que as legendas sejam desenhadas em uma linha horizontal.

Para que as legendas sejam desenhadas em uma coluna vertical, que seria uma melhor forma de visualização, você precisa incrementar o valor de y em vez de x. Além disso, para que as legendas não fiquem muito próximas umas das outras, sugiro que você incremente y em um valor maior, como 20, por exemplo.

Aqui está a função legendaNavs corrigida:

function legendaNavs(x, y, cores, texto){
    for(i = 0; i < 4; i++){
        desenhaRetangulo(x, y, 10, 10, cores[i]);
        desenhaTexto(x + 20, y + 10, texto[i]);
        y += 20;
    }
}

Com essa modificação, as legendas serão desenhadas uma abaixo da outra, tornando o gráfico mais fácil de entender.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.