Como gerar um gráfico de colunas empilhadas em Python, usando matplotlib

Gerar um gráfico de colunas empilhadas em Python

Neste tutorial de visualização de dados vou mostrar como criar um gráfico de colunas empilhadas na linguagem Python, usando o módulo matplotlib.

O que é um gráfico de colunas empilhadas?

Um gráfico de colunas empilhadas é um tipo de gráfico que exibe a distribuição proporcional de várias séries de dados em um eixo de tempo ou categoria. O gráfico consiste em uma pilha de colunas, onde cada coluna representa uma série de dados e cada seção empilhada na coluna representa a contribuição de cada categoria para essa série.

Em um gráfico de colunas empilhadas, as colunas são alinhadas uma sobre a outra e cada seção empilhada é colorida de acordo com uma chave de legenda para representar as diferentes séries de dados. A altura total da coluna representa o valor total de todas as séries de dados para uma determinada categoria ou período de tempo.

Esse tipo de gráfico é útil para comparar a contribuição de diferentes séries de dados em um período de tempo específico e também para comparar a tendência geral de cada série ao longo do tempo. No entanto, é importante ter cuidado ao interpretar os dados em um gráfico de colunas empilhadas, já que a altura total da coluna pode ser enganosa e a comparação entre as séries pode ser difícil quando uma série tem valores muito maiores do que as outras.

Segue abaixo um exemplo de código em Python utilizando a biblioteca Matplotlib para gerar um gráfico de colunas empilhadas de vendas de produtos em uma loja ao longo de um período de três meses:

Código

import matplotlib.pyplot as plt

meses = ['Jan', 'Fev', 'Mar']
produto1 = [1000, 1500, 1200]
produto2 = [800, 1200, 1500]
produto3 = [900, 1100, 1400]

plt.bar(meses, produto1, label='Produto 1', color='r')
plt.bar(meses, produto2, label='Produto 2', bottom=produto1, color='b')
plt.bar(meses, produto3, label='Produto 3', bottom=[sum(x) for x in zip(produto1, produto2)], color='g')

plt.ylabel('Vendas')
plt.title('Vendas por produto e mês')
plt.legend()
plt.show()

Resultado:

Gráfico de colunas empilhadas em Python com matplotlib

Gráfico de colunas empilhadas em Python com matplotlib

Funcionamento

O código gera um gráfico de colunas empilhadas para visualizar as vendas de três produtos em três meses diferentes.

Na primeira parte do código, são definidos os dados para o eixo x (meses) e para cada um dos três produtos (produto1, produto2 e produto3).

Em seguida, são utilizadas as funções plt.bar para criar cada uma das colunas empilhadas no gráfico.
A primeira chamada cria a coluna para o Produto 1, com a cor vermelha (color=’r’). A segunda chamada cria a coluna para o Produto 2, com a cor azul (color=’b’) e a opção bottom=produto1, que indica que essa coluna deve ser empilhada sobre a coluna do Produto 1.
A terceira chamada cria a coluna para o Produto 3, com a cor verde (color=’g’) e a opção bottom=[sum(x) for x in zip(produto1, produto2)], que indica que essa coluna deve ser empilhada sobre as colunas do Produto 1 e Produto 2.

Por fim, são adicionados os títulos dos eixos e o título do gráfico com as funções plt.ylabel, plt.title e plt.legend. E o gráfico é exibido na tela com a função plt.show.

O que faz a função zip()?

A função zip() em python é usada para agrupar iteráveis, como listas, em uma única estrutura de dados. Ela combina os elementos correspondentes dos iteráveis em tuplas, que podem ser acessadas posteriormente.

Por exemplo, se tivermos duas listas a = [1, 2, 3] e b = [4, 5, 6], podemos usar a função zip(a, b) para criar uma nova lista contendo tuplas de elementos correspondentes de a e b, ou seja, [(1, 4), (2, 5), (3, 6)].

No código apresentado, a função zip() é utilizada para combinar as listas produto1 e produto2 em uma única lista de tuplas, que é então utilizada como o argumento bottom na chamada da função plt.bar(). Isso faz com que as barras do segundo produto sejam empilhadas sobre as barras do primeiro produto. Em seguida, a mesma abordagem é usada para combinar as listas produto1, produto2 e produto3 em uma única lista de tuplas, que é utilizada como bottom para empilhar as barras do terceiro produto.

Código melhorado: valores em cada coluna

Para adicionar os valores de cada produto na coluna correspondente no gráfico, podemos utilizar o método text do objeto Axes. Veja o código modificado abaixo:

import matplotlib.pyplot as plt

meses = ['Jan', 'Fev', 'Mar']
produto1 = [1000, 1500, 1200]
produto2 = [800, 1200, 1500]
produto3 = [900, 1100, 1400]

plt.bar(meses, produto1, label='Produto 1', color='r')
plt.bar(meses, produto2, label='Produto 2', bottom=produto1, color='b')
plt.bar(meses, produto3, label='Produto 3', bottom=[sum(x) for x in zip(produto1, produto2)], color='g')

for i in range(len(meses)):
    plt.text(meses[i], produto1[i]/2, str(produto1[i]), ha='center', va='center', color='white')
    plt.text(meses[i], produto1[i]+produto2[i]/2, str(produto2[i]), ha='center', va='center', color='white')
    plt.text(meses[i], produto1[i]+produto2[i]+produto3[i]/2, str(produto3[i]), ha='center', va='center', color='white')

plt.ylabel('Vendas')
plt.title('Vendas por produto e mês')
plt.legend()
plt.show()

Resultado:

Gráfico de colunas empilhadas com rótulos em Python com matplotlib

Gráfico de colunas empilhadas com rótulos em Python com matplotlib

Este código gera um gráfico de colunas empilhadas usando a biblioteca Matplotlib em Python. Ele usa os dados de vendas mensais para três produtos diferentes (Produto 1, Produto 2 e Produto 3) em três meses diferentes (Jan, Fev e Mar).

A primeira etapa é definir os dados. As listas meses, produto1, produto2 e produto3 contêm os nomes dos meses e os valores das vendas mensais para cada produto.

A seguir, o código usa o método plt.bar() da biblioteca Matplotlib para criar as barras do gráfico. A primeira chamada cria as barras para o Produto 1, a segunda chamada cria as barras para o Produto 2, e a terceira chamada cria as barras para o Produto 3. O parâmetro bottom é usado para indicar a altura da barra, que é a soma dos valores dos produtos anteriores.

Por exemplo, para o Produto 2, bottom é definido como produto1, para que as barras correspondentes sejam empilhadas em cima das barras do Produto 1.

Em seguida, o código usa o loop for para adicionar rótulos para cada valor de venda em cada coluna correspondente. Isso é feito usando o método plt.text(), que recebe como parâmetros a posição do rótulo (definida pela combinação do mês e do valor de venda), o texto do rótulo e a cor do texto.

Finalmente, o código adiciona as legendas dos produtos, um título para o gráfico e exibe o gráfico usando o método plt.show().

Veja também: Como criar um gráfico de boxplot em Python com matplotlib

Sobre Fábio dos Reis (1197 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*