Gráficos de barra de pilha em Matplotlib

Suraj Joshi 6 fevereiro 2021
  1. Empilhar parcelas de barras Matplotlib
  2. Empilhamento de parcelas de barra Matplotlib usando Pandas
Gráficos de barra de pilha em Matplotlib

Geramos gráficos de barras em Matplotlib utilizando o método matplotlib.pyplot.bar(). Para empilhar o gráfico de barras de um determinado array de dados sobre outro, adicionamos todos os conjuntos de dados necessários para empilhar e passar a soma como o parâmetro bottom ao método bar().

import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

fig, ax = plt.subplots(3, 1, figsize=(10, 8))

ax[0].bar(year, data1, color="red")
ax[0].legend(["C++"])
ax[1].bar(year, data2, color="yellow")
ax[1].legend(["JavaScript"])
ax[2].bar(year, data3, color="green")
ax[2].legend(["Python"])

plt.show()

Resultado:

Exemplo para explicar o empilhamento do gráfico de barras Matplotlib

Aqui, temos três parcelas de bar separadas que representam a preferência de uma linguagem de programação para os empregados de uma empresa ao longo de cinco anos. Discutiremos as formas de empilhar o gráfico de barras de uma língua sobre outra e estudaremos a escolha global das linguagens de programação ao longo dos anos com um único gráfico de barras.

Empilhar parcelas de barras Matplotlib

import numpy as np
import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

plt.figure(figsize=(9, 7))
plt.bar(year, data3, color="green", label="Python")
plt.bar(year, data2, color="yellow", bottom=np.array(data3), label="JavaScript")
plt.bar(year, data1, color="red", bottom=np.array(data3) + np.array(data2), label="C++")

plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Resultado:

Empilhar parcelas de barras em Matplotlib

Empilha a parcela de uma barra no topo de outra. Na parcela, primeiro traçamos os data3 como dados Python, que servem de base para outras barras, e depois traçamos a barra de data2, e baseamos a barra de data3 como base para a barra de data2. Para empilhar a barra de data2 sobre data3, definimos bottom=np.array(data3).

Da mesma forma, ao traçar a barra de data1, utilizamos a barra de data2 e data3 como base. Para o fazer, definimos bottom=np.array(data3)+np.array(data2) enquanto traçamos a barra de data1.

Um ponto importante a salientar é que devemos utilizar NumPy arrays para adicionar os dados para o parâmetro bottom. Se definirmos bottom=data3+data2, será criada uma lista anexando os elementos de data2 no final da lista data3.

Se não quisermos utilizar arrays NumPy, podemos utilizar a compreensão da lista para adicionar os elementos correspondentes às listas.

import numpy as np
import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

plt.figure(figsize=(9, 7))
plt.bar(year, data3, color="green", label="Python")
plt.bar(year, data2, color="yellow", bottom=data3, label="JavaScript")
plt.bar(
    year,
    data1,
    color="red",
    bottom=[sum(data) for data in zip(data2, data3)],
    label="C++",
)

plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Resultado:

Empilhar gráficos de barras em Matplotlib utilizando a compreensão de listas

Empilhamento de parcelas de barra Matplotlib usando Pandas

Podemos também utilizar a biblioteca Pandas em Python para gerar parcelas de bar empilhadas em Python.

import pandas as pd
import matplotlib.pyplot as plt

years = ["2015", "2016", "2017", "2018", "2019"]
data = {
    "Python": [50, 60, 70, 80, 100],
    "JavaScript": [20, 20, 20, 20, 0],
    "C++": [30, 20, 10, 0, 0],
}

df = pd.DataFrame(data, index=years)

df.plot(kind="bar", stacked=True, figsize=(10, 8))
plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Resultado:

Empilhar parcelas de barras em Matplotlib utilizando Pandas

Gera um gráfico de barras empilhadas a partir de uma DataFrame Pandas onde o gráfico de barras de uma coluna é empilhado sobre outra para cada índice na DataFrame.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artigo relacionado - Matplotlib Visualizations