Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

[Dúvida] Desenvolvimento do Gráfico de Barras.

Boa noite pessoal, alguém poderia me informar dicas de como solucionar este desafio do Gráfico de barras?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

5 respostas

Olá Alexandre, tudo certo?

Analisando seu código precisamos realizar alterações dentro de duas funções:

A primeira e mais importante para que o gráfico seja gerado é a desenhaRetangulo, mais especificamente na linha 32 foi descrito que o programa deve usar da função strokeStyle, no entanto, o correto é strokeRect referente a forma que a linha toma para gerar o retângulo. Em resumo: enquanto a função strokeStyle define um estilo para o nosso objeto - como a cor, a strokeRect vai criar um retângulo com os parâmetros estabelecidos para ela.

Em um segundo momento, na função desenhaBarra, mais especificamente na linha 22, no que se refere aos retângulos criados para formar o gráfico de barras precisamos realizar 2 alterações:

  • A primeira é referente a altura do nosso objeto, como cada retângulo está sendo construído dentro de um laço de repetição, devemos atentar as alterações da posição vertical do retângulo. Conforme utilizamos a serie[i] como valor a ser somado a posição vertical (y), os retângulos não serão acrescentados um ao outro, isso ocorre pois cada retângulo é criado em sequência e sem considerar o anterior, para resolver isso, podemos somar a posição y com a somaAltura, assim considerando a soma anterior:
desenhaRetangulo(x, y + somaAltura,

O código deve ficar dessa forma após as correções:

Inicia transcrição. Captura de tela de duas sequência de 4 quadrados um embaixo do outro, cada quadrado é menor que o anterior e alinhado a esquerda do quadrado maior, os quadrados são coloridos de baixo pra cima em azul, verde, amarelo e vermelho. Finaliza transcrição.

  • Em um segundo momento, com os nossos retângulos posicionados corretamente, precisamos alterar a sua largura para que tenha igualdade e forme um retângulo completo que será o nosso gráfico. Dessa forma utilizaremos um valor fixo ao invés da serie[i], para que ambos os os retângulos fiquem com o mesmo tamanho:
desenhaRetangulo(x, y + somaAltura, 50,

Resultado final:

Inicia transcrição. A imagem mostra dois gráficos, que são duas barras, formadas por dois retângulos, um ao lado do outro e divididos em quatro retângulos cada um. O primeiro, à esquerda, traz o texto 2015 em seu topo, em seguida há a barra dividida em quatro partes. A primeira parte, de cima para baixo, está na cor azul que ocupa 50% da barra. A segunda parte está na cor verde, que ocupa 25% da barra, a terceira está na cor amarela, que ocupa 20% da barra, e a quarta está na cor vermelha, que ocupa 5% da barra. A segunda barra, à direita , traz o texto 2016 em seu topo, em seguida há a barra dividida em quatro partes. A primeira parte, de cima para baixo, está na cor azul, que ocupa 65% da barra. A segunda parte está na cor verde, que ocupa 20%, a terceira está na cor amarela, que ocupa 13% da barra e a quarta está na cor vermelha, que ocupa 2% da barra. Finaliza transcrição.

solução!

Segue o código completo corrigido:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Gráfico de Barras</title>
</head>
<body>
    <canvas width="600" height="400">
        <script>
            var serie2015 = [50,25,20,5];
            var serie2016 = [65,20,13,2];

            var cores = ['blue','green','yellow', 'red'];

            function desenhaBarra(x, y, serie, cores, texto) {
                desenhaTexto(x, y - 10, texto);

                var somaAltura = 0;

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

                }       
            }

            function desenhaRetangulo(x, y, largura, altura, cor) {
                var tela = document.querySelector('canvas');
                var pincel = tela.getContext('2d');

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

            function desenhaTexto(x , y, texto) {
                var tela = document.querySelector('canvas');
                var pincel = tela.getContext('2d');

                pincel.font='15px Georgia';
                pincel.fillStyle='black';
                pincel.fillText(texto, x, y);    
            }
            desenhaBarra(50, 50, serie2015, cores, '2015');
            desenhaBarra(150, 50, serie2016, cores, '2016');

        </script>
     </canvas>
    </body>
    </html>

Caso surja qualquer dúvida estamos à disposição, conte conosco!

Um bom dia e bons estudos.

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

Boa tarde Gabriel, muito obrigado por me ajudar nesta missão!!

Abraços!!

Uma dúvida: Por quê dentro da função desenhaBarra usa -10?

                            desenhaTexto(x, y - 10, texto);

Olá Bianca, tudo bem?

Chamamos a função desenhaTexto dentro do nosso gráfico para ilustrar qual gráfico se refere ao ano de 2015 e o de 2016, porém, a posição do nosso texto estará alinhada parte dentro do gráfico e parte fora, por conta disso, subtraímos o valor de -10 do eixo y, assim subindo a posição vertical do texto e posicionando o texto acima do nosso gráfico.

Peço que por gentileza abra um novo um tópico no Fórum se tiver alguma dúvida, para que dessa forma, tanto eu, quanto a comunidade Alura, possa ajudá-la de forma exclusiva e individual.

Se precisar de ajuda estamos à disposição, conte conosco.

Um bom dia e bons estudos.