Um Box Plot também é conhecido como gráfico Whisker é criado para exibir o resumo do conjunto de valores de dados com propriedades como mínimo, primeiro quartil, mediano, terceiro quartil e máximo. No gráfico de caixa, uma caixa é criada do primeiro quartil ao terceiro quartil, uma linha vertical também está lá que passa pela caixa na mediana. Aqui, o eixo x denota os dados a serem plotados enquanto o eixo y mostra a distribuição de frequência.

Criando Box Plot

O matplotlib.pyplotmódulo da biblioteca matplotlib fornece boxplot()funções com a ajuda da qual podemos criar gráficos de caixa.

Sintaxe:

matplotlib.pyplot.boxplot (data, notch = None, vert = None, patch_artist = None, widths = None)

Parâmetros:



Atributo Valor
dados matriz ou sequência da matriz a ser traçada
entalhe parâmetro opcional aceita valores booleanos
vert parâmetro opcional aceita valores booleanos falso e verdadeiro para gráfico horizontal e vertical, respectivamente
bootstrap parâmetro opcional aceita int especifica intervalos em torno de boxplots entalhados
usermedians parâmetro opcional aceita matriz ou sequência de dimensão de matriz compatível com dados
posições parâmetro opcional aceita array e define a posição das caixas
larguras parâmetro opcional aceita array e define a largura das caixas
patch_artist parâmetro opcional com valores booleanos
rótulos sequência de strings define rótulo para cada conjunto de dados
linha média optinal tendo valor booleano tente renderizar a linha média como largura total da caixa
zorder parâmetro opcional define o zorder do boxplot

Os valores de dados dados ao ax.boxplot()método podem ser uma matriz Numpy ou uma lista Python ou uma Tupla de matrizes. Vamos criar o gráfico de caixa usando numpy.random.normal()para criar alguns dados aleatórios, ele leva a média, o desvio padrão e o número desejado de valores como argumentos.

Exemplo:

import matplotlib.pyplot as plt 
import numpy as np 
  
  
np.random.seed(10) 
data = np.random.normal(100, 20, 200) 
  
fig = plt.figure(figsize =(10, 7)) 
plt.boxplot(data) 
plt.show() 

Resultado:
box-plot-python

Personalização do Box Plot

O matplotlib.pyplot.boxplot()oferece infinitas possibilidades de personalização para o box plot. O notch = Trueatributo cria o formato de entalhe para o box plot, patch_artist = Truepreenche o boxplot com cores, podemos definir cores diferentes para diferentes vert = 0caixas. O atributo cria boxplot horizontal. labelstem as mesmas dimensões que os conjuntos de dados numéricos.

Exemplo 1:

import matplotlib.pyplot as plt 
import numpy as np 
  
  
np.random.seed(10) 
  
data_1 = np.random.normal(100, 10, 200) 
data_2 = np.random.normal(90, 20, 200) 
data_3 = np.random.normal(80, 30, 200) 
data_4 = np.random.normal(70, 40, 200) 
data = [data_1, data_2, data_3, data_4] 
  
fig = plt.figure(figsize =(10, 7)) 
ax = fig.add_axes([0, 0, 1, 1]) 
bp = ax.boxplot(data) 
plt.show() 

Resultado:
box-plot-python

Exemplo 2: vamos tentar modificar o gráfico acima com algumas das personalizações:

import matplotlib.pyplot as plt 
import numpy as np 
np.random.seed(10) 
data_1 = np.random.normal(100, 10, 200) 
data_2 = np.random.normal(90, 20, 200) 
data_3 = np.random.normal(80, 30, 200) 
data_4 = np.random.normal(70, 40, 200) 
data = [data_1, data_2, data_3, data_4] 
  
fig = plt.figure(figsize =(10, 7)) 
ax = fig.add_subplot(111) 
bp = ax.boxplot(data, patch_artist = True, 
                notch ='True', vert = 0) 
  
colors = ['#0000FF', '#00FF00'
          '#FFFF00', '#FF00FF'] 
  
for patch, color in zip(bp['boxes'], colors): 
    patch.set_facecolor(color) 
for whisker in bp['whiskers']: 
    whisker.set(color ='#8B008B', 
                linewidth = 1.5, 
                linestyle =":") 
for cap in bp['caps']: 
    cap.set(color ='#8B008B', 
            linewidth = 2) 
for median in bp['medians']: 
    median.set(color ='red', 
               linewidth = 3) 
for flier in bp['fliers']: 
    flier.set(marker ='D', 
              color ='#e7298a', 
              alpha = 0.5) 
      
ax.set_yticklabels(['data_1', 'data_2'
                    'data_3', 'data_4']) 
plt.title("Customized box plot") 
ax.get_xaxis().tick_bottom() 
ax.get_yaxis().tick_left() 
      
plt.show(bp) 

Resultado:
box-plot-python