HOWTO · Matplotlib

Gráficos de barra de pilha em Matplotlib

Este tutorial mostra como podemos usar o método plt.bar() para empilhar barras de certos conjuntos de dados sobre outros. Geramos gráficos de barras em Matplotlib usando o método matplotlib.pyplot.bar().

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.