Gráficos de barra com matplotlib

Matheus Budkewicz
horaDeCodar
Published in
7 min readSep 17, 2018

Construção de gráficos de barra com a lib matplotlib, com exemplos do dia a dia.

Resolvi iniciar uma série de matplotlib, onde vou explicar com exemplos como e porque utilizar cada um dos gráficos.

Acredito que mais importante de que saber usar a lib em si, é saber o porque de ilustrar os dados com um gráfico x ou y, devemos sempre escolher o melhor para transmitir a informação de forma eficiente, objetiva e clara.

Então vamos começar pelo chamado bar chart, que nada mais é que o gráfico de colunas e barras, também podemos englobar os histogramas, vamos para a primeira sessão!

Ei você leitor! Criei um novo blog para os meus conteúdos, pois o Medium mesmo sendo uma excelente plataforma, me limitava em alguns recursos, que acredito que podem atrapalhar seu aprendizado/leitura…

Você pode acessar cliquando aqui!

Obrigado pela atenção, e boa leitura! :)

Conheça nosso canal no YouTube, com cursos gratuitos de qualidade e vídeos semanais, para acessar o canal clique aqui!

Utilização do gráfico de barra:

O gráfico de barra é facil de ler e entender. Você consegue ver os valores facilmente, e as labels em cada coluna facilitam para entender do que se trata. São espaçados e não geram confusão por não se ‘misturarem’ com outros dados do gráfico.

Este tipo de gráfico pode ser usado tanto vertical como horizontalmente.

Quando está na forma horizontal, podemos exibir dados com labels grande, pois não vão se embaralhar com as outras.

Para ranqueamento:

Podemos utilizar este gráfico em ranqueamentos, quando a posição de um item na lista é tão ou mais importante que seu valor em si, neste caso seria aconselhável ordernar os dados.

Vamos ver alguns exemplos de utilização:

  • 5 países mais ricos do mundo;
  • Tabelas de ligas de esporte;
  • Estados com maior produção agrícola;

Para magnitude:

Outra utilização comum é magnitude, comparação entre dados, por exemplo quando precisamos ver a quantidade de cada dado, quais são os maiores valores ou até mesmo as diferenças sutis entre eles, neste caso usamos sempre os números finais não percentuais.

Alguns exemplos de utilização:

  • Contagem de produção de barris de petróleo da empresa X por ano;
  • Salário por faixa etária da população do Canadá;
  • Quantidade de assaltos por ano no Brasil;

Observação: Quando comparamos duas colunas, precisamos sempre começar o eixo que representa a quantidade com 0, veremos mais a frente os problemas que isso pode causar.

Desvantagens:

  • Quando há muitos valores o gráfico de barras perde um pouco do seu brilho pela falta de espaço;
  • Pode ficar um pouco confuso visualizar dados com valores negativos e positivos no mesmo gráfico;

Hello World nos gráficos de barra:

Agora que vimos um pouco da teoria, vamos partir para a prática e quebrar a maldição do Hello World.

Porem antes dois lembretes:

  1. Confira aqui todo o código deste artigo;
  2. Vou usar o Jupyter Notebook para auxiliar na parte do código, quer instalar ele também para acompanhar? Confere aqui;

Agora podemos dar continuidade:

Importando as libs usadas e criando variáveis do gráfico
Métodos de título e labels

Como podemos observar a construção do gráfico de início parece um tanto complexa, e também acredito que ninguem decore tantos parâmetros de cabeça, então aconselho a sempre olhar a documentação quando for criar visualização de dados.

Pode conferir a doc oficial aqui!

Compreendendo a construção do gráfico:

Vamos agora comentar sobre o que acabou de acontecer: primeiramente criamos arrays com os valores imaginários para nosso gráfico, até aí nada demais.

bar():

Depois chamamos plt.bar(), este método da lib plt, inicia a construsção do gráfico de barra, e aí começamos a passar os argumentos, que em ordem são:

  • x: As coordernadas das barras do eixo X, que no nosso caso são as faixas etárias;
  • height: A ‘altura’ das barras, valores que vão dimensionar as mesmas, no nosso caso o array de renda média;
  • color: Um argumento opicional que determina a cor das barras;

xticks():

Prosseguindo temos o método xticks(), com ele definimos as labels do eixo X, ele precisa de um parâmetro com tipo de array que determine as labels.

ylabel() e xlabel():

Com estes dois métodos adicionamos as labels do eixo Y e X, respectivamente.

title():

title() adiciona o título do gráfico.

show():

Por fim, show mostra o gráfico na tela.

Prosseguindo:

Com esta explicação destes métodos essenciais já podemos seguir em frente.

Vimos o gráfico de barras em forma de colunas que é vertical, temos outra variação que é o gráfico de barras porem horizontal.

Com suas vantagens já explicadas anteriormente, a principal é que quando temos labels muito grande este tipo de gráfico nos ajuda a economizar espaço.

Gráfico de barras horizontal:

Vamos agora ver como construir um gráfico de barras horizontais.

Bom, este gráfico foi basicamente igual o outro, porém com barras horizontais, vemos a diferença no método barh() que substituiu o bar(), este ‘h’ adicionado é o que determina a criação do gráfico horizontal, vamos ver em mais detalhes:

barh():

Inicia a criação de um gráfico de barras horizontais, inserimos os seguintes parâmetros:

  • y: em y passamos as labels que irão compor o eixo Y;
  • width: aqui são os valores do gráfico, que determinarão a width ( largura ) das barras;
  • color: Um argumento opicional que determina a cor das barras;

Margem de erro:

Podemos também inserir a margem de erro nos nossos gráficos de coluna, vejamos como inserir utilizando o exemplo anterior:

xerr e yerr

Adicionamos um novo parâmetro xerr, que representou a margem de erro nas nossas barras horizontais, caso quisessemos representar no gráfico de colunas verticais deveriamos usar o yerr.

Veja que precisamos passar como valor do argumento uma lista que contenha exatamente o mesmo número de elementos que a lista dos valores, no nosso exemplo seria a quantidade de elementos de quantidade_pct.

Gráfico de barras agrupadas:

Outro gráfico que podemos construir com barras é o agrupado, a vantagem deste tipo de gráfico é comparar diferentes grupos com o mesmo valor de uma variável, vamos ver um exemplo:

Definindo os valores do gráfico, largura e posição das barras
Finalizando a plotagem

O que foi feito?

A principal diferença dos outros é que plotamos 3 barras e posicionamos elas no espaço do gráfico. Vamos verificar as particularidades:

barWidth:

A partir desta variável definimos as larguras das barras, sem a largura definida os gráficos vão se sobrepor, pois o matplotlib irá maximizar a largura dos gráficos diante do espaço disponível.

plt.figure():

Com o método figure e o parâmetro figsize, nós aumentamos o gráfico para termos uma melhor visualização das informações.

r1, r2 e r3

Com estas variáveis é possível ter uma barra do lado da outra, primeiramente é checada a largura da primeira barra e depois de forma incremental se posicionam as outras, pela referência das larguras das anteriores.

plt.bar()

Com este método que é construída a barra, com diferencial que adicionamos as variáveis que representam as posições (r1,r2,r3) como argumento, e também a largura das barras (barWidth), o resto foi visto nos gráficos anteriores.

xticks()

Embora já termos o utilizado para adicionar labels no eixo X, neste tipo de gráfico há uma particularidade, há um for loop que distribui as legendas uniformemente em cada um dos grupos.

Gráfico de barras empilhadas:

Neste último tipo de gráfico, representados vários valores em uma coluna só, veja o exemplo:

Valores iniciais do gráfico
Construindo o gráfico

O que foi feito?

Vamos entender as particularidades do gráfico ‘stacked’, como é chamado em inglês.

np.array()

Definimos os arrays dos recursos com a função do nunpy para poder manejar de forma mais fácil mais adiante.

plt.bar()

No método que faz o plot da coluna, nós usamos o argumento bottom, que justamente faz com que os valores fiquem empilhados, tendo como refêrencia o valor que deve ficar abaixo.

E para a ultima barra, somamos os valores dos dois primeiros, para ela ficar na posição correta, essa soma é possível graças ao np.array()

O restante do gráfico já observamos nos outros tipos.

Conclusão:

Vimos os tipos mais conhecidos de gráficos de colunas:

  • O própio gráfico de barras: que tem um valor para cada barra, mais comum de vermos em estatísticas com barras verticais;
  • Gráfico de barras horizontais: gráfico de colunas horizontais, também muito utilizado;
  • Gráfico de barras agrupadas: conhecido como grouped bar chart, este agrupa vários valores em uma posição;
  • Gráfico de barras empilhadas: com este gráfico é possível colocar vários valores em uma barra só, como o nome diz empilhados ou stacked;

Abordamos também os principais parâmetros para construção das barras, e também alguns métodos que auxiliam a plotagem como os de labels nos dois eixos, título, legenda e também aplicação de cores.

Também foi visto a margem de erro e como aplica-la.

Acredito que temos base agora para plotar gráficos de colunas das mais variadas formas, assim devemos escolher o gráfico mais adequado para cada situação. E reforço que se você quiser algo mais específico, deve olhar a documentação, lá você encontra outros parâmetros que podem melhorar ainda mais a visualização dos seus dados.

Obrigado por ler e até o próximo post. :)

--

--