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:
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:
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:
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:
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 is a backend software engineer at Matrice.ai.
LinkedIn