Introdução
Neste tutorial, aprenderemos como personalizar box plots (diagramas de caixa) em Matplotlib. Box plots são uma forma popular de visualizar a distribuição de um conjunto de dados. Eles também são conhecidos como box-and-whisker plots (diagramas de caixa e bigodes) e mostram a mediana, os quartis e os outliers (valores discrepantes) dos dados. Percorreremos vários exemplos para aprender como personalizar box plots usando Matplotlib.
Dicas para a VM
Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.
Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.
Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.
Importar as Bibliotecas Necessárias
Começaremos importando as bibliotecas necessárias, que são Matplotlib e NumPy. Também definiremos uma semente aleatória para NumPy para garantir que nossos resultados sejam reproduzíveis.
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(19680801)
Gerar Dados
Geraremos alguns dados aleatórios para usar em nossos exemplos. Usaremos a função NumPy random.lognormal() para gerar dados log-normais com uma média de 1.5 e um desvio padrão de 1.75. Geraremos 37 amostras de 4 variáveis e as armazenaremos na variável data. Também criaremos uma lista de rótulos para cada variável.
data = np.random.lognormal(size=(37, 4), mean=1.5, sigma=1.75)
labels = list('ABCD')
Box Plot Padrão
Começaremos criando um box plot padrão para visualizar os dados. Usaremos a função Matplotlib boxplot() e passaremos os dados e os rótulos como argumentos. Também definiremos o título do gráfico usando a função set_title().
fig, ax = plt.subplots()
ax.boxplot(data, labels=labels)
ax.set_title('Default Box Plot')
plt.show()
Remover Componentes Individuais
Podemos remover componentes individuais do box plot usando os vários argumentos de palavra-chave disponíveis na função boxplot(). Por exemplo, podemos remover as médias definindo showmeans como False. Também podemos remover a caixa e os "whiskers" (arestas) definindo showbox e showcaps como False, respectivamente.
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8, 8), sharey=True)
axs[0, 0].boxplot(data, labels=labels)
axs[0, 0].set_title('Default')
axs[0, 1].boxplot(data, labels=labels, showmeans=False)
axs[0, 1].set_title('No Means')
axs[1, 0].boxplot(data, labels=labels, showbox=False, showcaps=False)
axs[1, 0].set_title('No Box or Whiskers')
axs[1, 1].boxplot(data, labels=labels, showfliers=False)
axs[1, 1].set_title('No Outliers')
plt.show()
Personalizando os Estilos do Box Plot
Também podemos personalizar os estilos do box plot usando os vários argumentos de palavra-chave disponíveis na função boxplot(). Por exemplo, podemos alterar a cor e o estilo da linha da caixa definindo boxprops. Também podemos alterar o estilo da mediana, da média e da linha da média definindo medianprops, meanprops e meanlineprops, respectivamente.
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8, 8), sharey=True)
axs[0, 0].boxplot(data, labels=labels)
axs[0, 0].set_title('Default')
boxprops = dict(linestyle='--', linewidth=2, color='red')
axs[0, 1].boxplot(data, labels=labels, boxprops=boxprops)
axs[0, 1].set_title('Custom Box')
medianprops = dict(linestyle='-', linewidth=2, color='blue')
meanprops = dict(marker='D', markeredgecolor='black', markerfacecolor='green')
meanlineprops = dict(linestyle='--', linewidth=2, color='red')
axs[1, 0].boxplot(data, labels=labels, medianprops=medianprops, meanprops=meanprops, meanline=True, meanlineprops=meanlineprops)
axs[1, 0].set_title('Custom Median, Mean, and Mean Line')
flierprops = dict(marker='o', markerfacecolor='red', markersize=8, markeredgecolor='none')
axs[1, 1].boxplot(data, labels=labels, flierprops=flierprops)
axs[1, 1].set_title('Custom Outliers')
plt.show()
Resumo
Box plots são uma ótima maneira de visualizar a distribuição de um conjunto de dados. Matplotlib oferece muitas opções de personalização para box plots, como remover componentes individuais e personalizar os estilos dos componentes. Ao usar essas opções, podemos criar box plots que comunicam efetivamente a informação que queremos transmitir.